diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index b22fabb..1e51cd8 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -1,7 +1,25 @@ - + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index b22fabb..1e51cd8 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -1,7 +1,25 @@ - + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b4c4ff3..b02e54b 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -13,14 +13,14 @@ + style="@style/itemLayoutStyle"> @@ -29,20 +29,20 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -52,20 +52,19 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -75,20 +74,40 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + + + + + + + + + + style="@style/itemLayoutStyle"> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index b22fabb..1e51cd8 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -1,7 +1,25 @@ - + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b4c4ff3..b02e54b 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -13,14 +13,14 @@ + style="@style/itemLayoutStyle"> @@ -29,20 +29,20 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -52,20 +52,19 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -75,20 +74,40 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + + + + + + + + + + style="@style/itemLayoutStyle"> diff --git a/app/src/main/res/layout/fragment_phone.xml b/app/src/main/res/layout/fragment_phone.xml index c96a2e9..c8d2a17 100644 --- a/app/src/main/res/layout/fragment_phone.xml +++ b/app/src/main/res/layout/fragment_phone.xml @@ -1,7 +1,11 @@ - + android:background="@color/white"> - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index b22fabb..1e51cd8 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -1,7 +1,25 @@ - + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b4c4ff3..b02e54b 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -13,14 +13,14 @@ + style="@style/itemLayoutStyle"> @@ -29,20 +29,20 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -52,20 +52,19 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -75,20 +74,40 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + + + + + + + + + + style="@style/itemLayoutStyle"> diff --git a/app/src/main/res/layout/fragment_phone.xml b/app/src/main/res/layout/fragment_phone.xml index c96a2e9..c8d2a17 100644 --- a/app/src/main/res/layout/fragment_phone.xml +++ b/app/src/main/res/layout/fragment_phone.xml @@ -1,7 +1,11 @@ - + android:background="@color/white"> - \ No newline at end of file + + \ 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 new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/fragment_read.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index b22fabb..1e51cd8 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -1,7 +1,25 @@ - + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b4c4ff3..b02e54b 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -13,14 +13,14 @@ + style="@style/itemLayoutStyle"> @@ -29,20 +29,20 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -52,20 +52,19 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -75,20 +74,40 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + + + + + + + + + + style="@style/itemLayoutStyle"> diff --git a/app/src/main/res/layout/fragment_phone.xml b/app/src/main/res/layout/fragment_phone.xml index c96a2e9..c8d2a17 100644 --- a/app/src/main/res/layout/fragment_phone.xml +++ b/app/src/main/res/layout/fragment_phone.xml @@ -1,7 +1,11 @@ - + android:background="@color/white"> - \ No newline at end of file + + \ 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 new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/fragment_read.xml @@ -0,0 +1,7 @@ + + + + \ 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 new file mode 100644 index 0000000..cf20840 --- /dev/null +++ b/app/src/main/res/layout/fragment_unread.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index b22fabb..1e51cd8 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -1,7 +1,25 @@ - + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b4c4ff3..b02e54b 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -13,14 +13,14 @@ + style="@style/itemLayoutStyle"> @@ -29,20 +29,20 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -52,20 +52,19 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -75,20 +74,40 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + + + + + + + + + + style="@style/itemLayoutStyle"> diff --git a/app/src/main/res/layout/fragment_phone.xml b/app/src/main/res/layout/fragment_phone.xml index c96a2e9..c8d2a17 100644 --- a/app/src/main/res/layout/fragment_phone.xml +++ b/app/src/main/res/layout/fragment_phone.xml @@ -1,7 +1,11 @@ - + android:background="@color/white"> - \ No newline at end of file + + \ 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 new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/fragment_read.xml @@ -0,0 +1,7 @@ + + + + \ 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 new file mode 100644 index 0000000..cf20840 --- /dev/null +++ b/app/src/main/res/layout/fragment_unread.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_child_list.xml b/app/src/main/res/layout/item_child_list.xml new file mode 100644 index 0000000..7be1918 --- /dev/null +++ b/app/src/main/res/layout/item_child_list.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index b22fabb..1e51cd8 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -1,7 +1,25 @@ - + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b4c4ff3..b02e54b 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -13,14 +13,14 @@ + style="@style/itemLayoutStyle"> @@ -29,20 +29,20 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -52,20 +52,19 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -75,20 +74,40 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + + + + + + + + + + style="@style/itemLayoutStyle"> diff --git a/app/src/main/res/layout/fragment_phone.xml b/app/src/main/res/layout/fragment_phone.xml index c96a2e9..c8d2a17 100644 --- a/app/src/main/res/layout/fragment_phone.xml +++ b/app/src/main/res/layout/fragment_phone.xml @@ -1,7 +1,11 @@ - + android:background="@color/white"> - \ No newline at end of file + + \ 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 new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/fragment_read.xml @@ -0,0 +1,7 @@ + + + + \ 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 new file mode 100644 index 0000000..cf20840 --- /dev/null +++ b/app/src/main/res/layout/fragment_unread.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_child_list.xml b/app/src/main/res/layout/item_child_list.xml new file mode 100644 index 0000000..7be1918 --- /dev/null +++ b/app/src/main/res/layout/item_child_list.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_group_list.xml b/app/src/main/res/layout/item_group_list.xml new file mode 100644 index 0000000..810d886 --- /dev/null +++ b/app/src/main/res/layout/item_group_list.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index b22fabb..1e51cd8 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -1,7 +1,25 @@ - + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b4c4ff3..b02e54b 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -13,14 +13,14 @@ + style="@style/itemLayoutStyle"> @@ -29,20 +29,20 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -52,20 +52,19 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -75,20 +74,40 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + + + + + + + + + + style="@style/itemLayoutStyle"> diff --git a/app/src/main/res/layout/fragment_phone.xml b/app/src/main/res/layout/fragment_phone.xml index c96a2e9..c8d2a17 100644 --- a/app/src/main/res/layout/fragment_phone.xml +++ b/app/src/main/res/layout/fragment_phone.xml @@ -1,7 +1,11 @@ - + android:background="@color/white"> - \ No newline at end of file + + \ 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 new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/fragment_read.xml @@ -0,0 +1,7 @@ + + + + \ 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 new file mode 100644 index 0000000..cf20840 --- /dev/null +++ b/app/src/main/res/layout/fragment_unread.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_child_list.xml b/app/src/main/res/layout/item_child_list.xml new file mode 100644 index 0000000..7be1918 --- /dev/null +++ b/app/src/main/res/layout/item_child_list.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_group_list.xml b/app/src/main/res/layout/item_group_list.xml new file mode 100644 index 0000000..810d886 --- /dev/null +++ b/app/src/main/res/layout/item_group_list.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_notice_list.xml b/app/src/main/res/layout/item_notice_list.xml new file mode 100644 index 0000000..753003e --- /dev/null +++ b/app/src/main/res/layout/item_notice_list.xml @@ -0,0 +1,33 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7befe7c..54b3625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + + groupData = new ArrayList<>(); + private List> childData = new ArrayList<>(); + private LayoutInflater layoutInflater; + + public DeptExpandableAdapter(Context mContext) { + layoutInflater = LayoutInflater.from(mContext); + } + + public void setData(@Nullable List groupList, @Nullable List> childList) { + groupData.clear(); + childData.clear(); + if (groupList != null) { + this.groupData = groupList; + if (childList != null) { + this.childData = childList; + } + } + notifyDataSetChanged(); + } + + @Override + public int getGroupCount() { + return groupData.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return childData.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return groupData.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childData.get(groupPosition).get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupViewHolder groupHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_group_list, parent, false); + groupHolder = new GroupViewHolder(); + groupHolder.groupNameView = convertView.findViewById(R.id.groupNameView); + convertView.setTag(groupHolder); + } else { + groupHolder = (GroupViewHolder) convertView.getTag(); + } + groupHolder.groupNameView.setText(groupData.get(groupPosition)); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildViewHolder itemHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_child_list, parent, false); + itemHolder = new ChildViewHolder(); + itemHolder.childNameView = convertView.findViewById(R.id.childNameView); + itemHolder.childPhoneView = convertView.findViewById(R.id.childPhoneView); + convertView.setTag(itemHolder); + } else { + itemHolder = (ChildViewHolder) convertView.getTag(); + } + itemHolder.childNameView.setText(childData.get(groupPosition).get(childPosition).getPersonName()); + itemHolder.childPhoneView.setText(childData.get(groupPosition).get(childPosition).getPersonPhone()); + return convertView; + } + + //设置子列表是否可选中 + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class GroupViewHolder { + private TextView groupNameView; + } + + private static class ChildViewHolder { + private TextView childNameView; + private TextView childPhoneView; + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java new file mode 100644 index 0000000..aa469ff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -0,0 +1,96 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.NoticeBean; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeViewHolder; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:47 + * @email : 290677893@qq.com + **/ +public class SwipeViewAdapter extends RecyclerView.Adapter { + + private List mData = new ArrayList<>(); + private final QMUISwipeAction mDeleteAction; + + public SwipeViewAdapter(Context context) { + QMUISwipeAction.ActionBuilder builder = new QMUISwipeAction.ActionBuilder() + .textSize(QMUIDisplayHelper.sp2px(context, 18)) + .textColor(Color.WHITE) + .paddingStartEnd(QMUIDisplayHelper.dp2px(context, 18)); + mDeleteAction = builder.text("删除").backgroundColor(Color.RED).build(); + } + + public void setData(@Nullable List list) { + mData.clear(); + if (list != null) { + mData.addAll(list); + } + notifyDataSetChanged(); + } + + public void remove(int pos) { + mData.remove(pos); + notifyItemRemoved(pos); + } + + @NonNull + @Override + public QMUISwipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice_list, parent, false); + final QMUISwipeViewHolder swipeViewHolder = new QMUISwipeViewHolder(view); + swipeViewHolder.addSwipeAction(mDeleteAction); + return swipeViewHolder; + } + + @Override + public void onBindViewHolder(@NonNull QMUISwipeViewHolder holder, int position) { + TextView noticeTitleView = holder.itemView.findViewById(R.id.noticeTitleView); + TextView noticeDateView = holder.itemView.findViewById(R.id.noticeDateView); + TextView noticeContentView = holder.itemView.findViewById(R.id.noticeContentView); + + NoticeBean noticeBean = mData.get(position); + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + 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/DeptTreeBean.java b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java new file mode 100644 index 0000000..7f0f079 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/DeptTreeBean.java @@ -0,0 +1,153 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:46 + * @email : 290677893@qq.com + **/ +public class DeptTreeBean { + + /** + * code : 200.0 + * data : {"list":[{"checked":false,"code":"","id":"1177026995528237058","name":"指挥中心","open":false,"pcodes":"","pid":"24","value":""}]} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * checked : false + * code : + * id : 1177026995528237058 + * name : 指挥中心 + * open : false + * pcodes : + * pid : 24 + * value : + */ + + private boolean checked; + private String code; + private String id; + private String name; + private boolean open; + private String pcodes; + private String pid; + private String value; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getPcodes() { + return pcodes; + } + + public void setPcodes(String pcodes) { + this.pcodes = pcodes; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java new file mode 100644 index 0000000..e68d12e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -0,0 +1,45 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:03 + * @email : 290677893@qq.com + **/ +public class NoticeBean { + private String noticeTitle; + private String noticeDate; + private String noticeContent; + private String senderName; + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeDate() { + return noticeDate; + } + + public void setNoticeDate(String noticeDate) { + this.noticeDate = noticeDate; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java new file mode 100644 index 0000000..d6443ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PersonPhoneBean.java @@ -0,0 +1,27 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/15 13:00 + * @email : 290677893@qq.com + **/ +public class PersonPhoneBean { + private String personName; + private String personPhone; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPersonPhone() { + return personPhone; + } + + public void setPersonPhone(String personPhone) { + this.personPhone = personPhone; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java new file mode 100644 index 0000000..9242676 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/PhoneBookBean.java @@ -0,0 +1,131 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:34 + * @email : 290677893@qq.com + **/ +public class PhoneBookBean { + + /** + * code : 200.0 + * data : [{"account":"sp_zhcg","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1206921310454312961","name":"中心视频","phone":""},{"account":"cgzbz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177048865279356930","name":"值班长","phone":""},{"account":"pacr_dp","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1355036418525347842","name":"平安崇仁对接用户","phone":""},{"account":"cgzhz","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177049102999924737","name":"指挥长","phone":"18600202669"},{"account":"cgjd03","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1196382448976011266","name":"李斌","phone":""},{"account":"cgjd01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160002","name":"王金龙","phone":"18600202669"},{"account":"cgsl01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050327115935746","name":"白雅茹","phone":""},{"account":"cgpq01","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050762996396034","name":"艾闻","phone":""},{"account":"cgjd02","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1177050541084160013","name":"苗建峰","phone":""},{"account":"cgld","attr1":"","deptId":"1177026995528237058","deptName":"指挥中心","id":"1193696400776249345","name":"领导","phone":""}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * account : sp_zhcg + * attr1 : + * deptId : 1177026995528237058 + * deptName : 指挥中心 + * id : 1206921310454312961 + * name : 中心视频 + * phone : + */ + + private String account; + private String attr1; + private String deptId; + private String deptName; + private String id; + private String name; + private String phone; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAttr1() { + return attr1; + } + + public void setAttr1(String attr1) { + this.attr1 = attr1; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java new file mode 100644 index 0000000..c9af913 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/DeptTreeModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 12:35 + * @email : 290677893@qq.com + **/ +public class DeptTreeModelImpl implements IDeptTreeModel { + + private OnGetDeptTreeListener listener; + + public DeptTreeModelImpl(OnGetDeptTreeListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetDeptTreeListener { + void onSuccess(DeptTreeBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String pid) { + Observable observable = RetrofitServiceManager.getDeptTreeResult(pid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(DeptTreeBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java new file mode 100644 index 0000000..ab1947c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IDeptTreeModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IDeptTreeModel { + Subscription sendRetrofitRequest(String pid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java new file mode 100644 index 0000000..9b3fa28 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IPhoneBookModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IPhoneBookModel { + Subscription sendRetrofitRequest(String deptid); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java new file mode 100644 index 0000000..48247c2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/PhoneBookModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:21 + * @email : 290677893@qq.com + **/ +public class PhoneBookModelImpl implements IPhoneBookModel { + + private OnGetPhoneBookListener listener; + + public PhoneBookModelImpl(OnGetPhoneBookListener bookListener) { + this.listener = bookListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetPhoneBookListener { + void onSuccess(PhoneBookBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String deptid) { + Observable observable = RetrofitServiceManager.getPhoneBookResult(deptid); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(PhoneBookBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java new file mode 100644 index 0000000..e010f1a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/DeptTreePresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.DeptTreeModelImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; + +public class DeptTreePresenterImpl extends BasePresenter implements IDeptTreePresenter, DeptTreeModelImpl.OnGetDeptTreeListener { + + private IDeptTreeView view; + private DeptTreeModelImpl actionModel; + + public DeptTreePresenterImpl(IDeptTreeView deptTreeView) { + this.view = deptTreeView; + actionModel = new DeptTreeModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String pid) { + addSubscription(actionModel.sendRetrofitRequest(pid)); + } + + @Override + public void onSuccess(DeptTreeBean resultBean) { + view.obtainDeptTreeResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java new file mode 100644 index 0000000..81e5e65 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IDeptTreePresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IDeptTreePresenter { + void onReadyRetrofitRequest(String pid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java new file mode 100644 index 0000000..bb5fa97 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IPhoneBookPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IPhoneBookPresenter { + void onReadyRetrofitRequest(String deptid); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java new file mode 100644 index 0000000..97dfe8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/PhoneBookPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.PhoneBookModelImpl; +import com.casic.dcms.mvp.view.IPhoneBookView; + +public class PhoneBookPresenterImpl extends BasePresenter implements IPhoneBookPresenter, PhoneBookModelImpl.OnGetPhoneBookListener { + + private IPhoneBookView view; + private PhoneBookModelImpl actionModel; + + public PhoneBookPresenterImpl(IPhoneBookView phoneBookView) { + this.view = phoneBookView; + actionModel = new PhoneBookModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String deptid) { + addSubscription(actionModel.sendRetrofitRequest(deptid)); + } + + @Override + public void onSuccess(PhoneBookBean resultBean) { + view.obtainPhoneBookResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java new file mode 100644 index 0000000..805e0a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IDeptTreeView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.DeptTreeBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:41 + * @email : 290677893@qq.com + **/ +public interface IDeptTreeView { + void obtainDeptTreeResult(DeptTreeBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java new file mode 100644 index 0000000..0b815d6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPhoneBookView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.PhoneBookBean; + +/** + * @author : Pengxh + * @time : 2021/4/15 11:17 + * @email : 290677893@qq.com + **/ +public interface IPhoneBookView { + void obtainPhoneBookResult(PhoneBookBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index aa4100a..549b16a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -118,9 +118,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.black)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); + caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -517,7 +517,7 @@ if (largeClassBeans.size() == 0) { caseLargeClassView.setText("无小类"); } else { - caseLargeClassView.setText("请选择"); + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); @@ -535,7 +535,7 @@ if (smallClassBeans.size() == 0) { caseSmallClassView.setText("无小类"); } else { - caseSmallClassView.setText("请选择"); + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); } 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 5535f61..9b9b62b 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -9,7 +9,7 @@ import android.widget.EditText; import com.casic.dcms.R; -import com.casic.dcms.base.DoubleClickExitActivity; +import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.mvp.presenter.AuthenticatePresenterImpl; @@ -32,7 +32,7 @@ import butterknife.BindView; import butterknife.OnClick; -public class LoginActivity extends DoubleClickExitActivity implements View.OnClickListener, IAuthenticateView, ILoginView { +public class LoginActivity extends BaseActivity implements View.OnClickListener, IAuthenticateView, ILoginView { private static final String TAG = "LoginActivity"; 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 4351cb6..937806b 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; +import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; @@ -32,7 +33,7 @@ @BindView(R.id.mainTopLayout) QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) - ViewPager mainViewPager; + NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; private Context context = this; diff --git a/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java new file mode 100644 index 0000000..6c9e96a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/NoticeActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.NoticeBean; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 10:35 + * @email : 290677893@qq.com + **/ +public class NoticeActivity extends BaseActivity { + + @BindView(R.id.noticeTopLayout) + QMUITopBarLayout noticeTopLayout; + @BindView(R.id.noticeTitleView) + TextView noticeTitleView; + @BindView(R.id.noticeSenderView) + TextView noticeSenderView; + @BindView(R.id.noticeDateView) + TextView noticeDateView; + @BindView(R.id.noticeContentView) + TextView noticeContentView; + + @Override + public int initLayoutView() { + return R.layout.activity_notice; + } + + @Override + protected void setupTopBarLayout() { + noticeTopLayout.setTitle("消息内容").setTextColor(ContextCompat.getColor(this, R.color.white)); + noticeTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + noticeTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @SuppressLint("SetTextI18n") + @Override + public void initData() { + String noticeBeanJson = getIntent().getStringExtra("noticeBeanJson"); + NoticeBean noticeBean = new Gson().fromJson(noticeBeanJson, NoticeBean.class); + + noticeTitleView.setText(noticeBean.getNoticeTitle()); + noticeSenderView.setText("发送者:" + noticeBean.getSenderName()); + noticeDateView.setText(noticeBean.getNoticeDate()); + noticeContentView.setText(noticeBean.getNoticeContent()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index ed8bf57..9d64c11 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -1,9 +1,36 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; public class DashBoardPageFragment extends BaseFragment { + + private static final String[] pageTitles = {"未读消息", "已读消息"}; + @BindView(R.id.topTabLayout) + TabLayout topTabLayout; + @BindView(R.id.dashboardViewPager) + NoScrollViewPager dashboardViewPager; + + private Context context; + private List fragmentList; + @Override protected int initLayoutView() { return R.layout.fragment_dashboard; @@ -11,16 +38,48 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + fragmentList = new ArrayList<>(); + fragmentList.add(new UnreadFragment()); + fragmentList.add(new ReadFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + dashboardViewPager.setAdapter(adapter); + //绑定TabLayout + topTabLayout.setupWithViewPager(dashboardViewPager); + LinearLayout linearLayout = (LinearLayout) topTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); } @Override protected void initEvent() { } + + class SubViewPagerAdapter extends FragmentPagerAdapter { + + SubViewPagerAdapter(FragmentManager fm) { + super(fm); + } + + @NotNull + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e467298..cf9a45d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -126,6 +126,7 @@ StringHelper.saveUserName(data.getName()); StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); } } 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 8dd20ef..35494e7 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 @@ -3,6 +3,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import com.casic.dcms.BuildConfig; @@ -16,6 +18,7 @@ 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.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -25,10 +28,10 @@ public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { - private static final String TAG = "MinePageFragment"; - @BindView(R.id.versionCodeView) TextView versionCodeView; + @BindView(R.id.autoLoginSwitch) + Switch autoLoginSwitch; @BindView(R.id.loginOutButton) QMUIRoundButton loginOutButton; @@ -49,11 +52,19 @@ protected void initData() { versionCodeView.setText(BuildConfig.VERSION_NAME); loginOutPresenter = new LoginOutPresenterImpl(this); + boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); + autoLoginSwitch.setChecked(isAutoLogin); } @Override protected void initEvent() { loginOutButton.setChangeAlphaWhenPress(true); + autoLoginSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SaveKeyValues.putValue("autoLogin", isChecked); + } + }); } @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) 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 516830f..f680234 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 @@ -1,9 +1,45 @@ package com.casic.dcms.ui.fragment; -import com.casic.dcms.R; -import com.casic.dcms.base.BaseFragment; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.widget.ExpandableListView; -public class PhonePageFragment extends BaseFragment { +import com.casic.dcms.R; +import com.casic.dcms.adapter.DeptExpandableAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.PersonPhoneBean; +import com.casic.dcms.bean.PhoneBookBean; +import com.casic.dcms.mvp.presenter.DeptTreePresenterImpl; +import com.casic.dcms.mvp.presenter.PhoneBookPresenterImpl; +import com.casic.dcms.mvp.view.IDeptTreeView; +import com.casic.dcms.mvp.view.IPhoneBookView; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class PhonePageFragment extends BaseFragment implements IDeptTreeView, IPhoneBookView { + + private static final String TAG = "PhonePageFragment"; + + @BindView(R.id.deptTreeView) + ExpandableListView deptTreeView; + + private Context context; + private DeptTreePresenterImpl deptTreePresenter; + private PhoneBookPresenterImpl phoneBookPresenter; + private List deptList = new ArrayList<>();//部门名集合 + private List personPhones = new ArrayList<>();//个人信息集合 + private List> deptAndPersons = new ArrayList<>();//个人信息集合的集合 + private DeptExpandableAdapter expandableAdapter; + @Override protected int initLayoutView() { return R.layout.fragment_phone; @@ -11,16 +47,89 @@ @Override protected void setupTopBarLayout() { - + context = getContext(); } @Override protected void initData() { - + deptTreePresenter = new DeptTreePresenterImpl(this); + deptTreePresenter.onReadyRetrofitRequest("0"); + phoneBookPresenter = new PhoneBookPresenterImpl(this); + expandableAdapter = new DeptExpandableAdapter(context); } @Override protected void initEvent() { } + + + @Override + public void obtainDeptTreeResult(DeptTreeBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + //先获取部门树,在往树结构里面加人 + if (resultBean.isSuccess()) { + List listBeans = resultBean.getData().getList(); + deptList.clear(); + for (DeptTreeBean.DataBean.ListBean bean : listBeans) { + deptList.add(bean.getName()); + } + if (deptList.size() > 0) { + phoneBookPresenter.onReadyRetrofitRequest(StringHelper.getUserDeptId()); + } + } + } + + @Override + public void obtainPhoneBookResult(PhoneBookBean resultBean) { +// Log.d(TAG, "obtainPhoneBookResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + personPhones.clear(); + for (PhoneBookBean.DataBean bean : dataBeans) { + PersonPhoneBean personPhoneBean = new PersonPhoneBean(); + personPhoneBean.setPersonName(bean.getName()); + personPhoneBean.setPersonPhone(bean.getPhone()); + personPhones.add(personPhoneBean); + } + //整体打包装入集合 + deptAndPersons.clear(); + deptAndPersons.add(personPhones); + //展示部门树以及人员 + expandableAdapter.setData(deptList, deptAndPersons); + deptTreeView.setAdapter(expandableAdapter); + 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()); + return true; + } + }); + } + } + + /** + * 直接呼叫电话 + */ + private void callPhone(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); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (deptTreePresenter != null) { + deptTreePresenter.disposeRetrofitRequest(); + } + if (phoneBookPresenter != null) { + phoneBookPresenter.disposeRetrofitRequest(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java new file mode 100644 index 0000000..7b1e1fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ReadFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class ReadFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_read; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java new file mode 100644 index 0000000..3e1a099 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/UnreadFragment.java @@ -0,0 +1,116 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.content.Intent; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SwipeViewAdapter; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.NoticeBean; +import com.casic.dcms.ui.NoticeActivity; +import com.google.gson.Gson; +import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; +import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/15 9:33 + * @email : 290677893@qq.com + **/ +public class UnreadFragment extends BaseFragment { + + @BindView(R.id.swipeRecyclerView) + RecyclerView swipeRecyclerView; + + private Context context; + private List noticeBeans = new ArrayList<>(); + private SwipeViewAdapter swipeViewAdapter; + + @Override + protected int initLayoutView() { + return R.layout.fragment_unread; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + noticeBeans = getTestData(); + swipeViewAdapter = new SwipeViewAdapter(getContext()); + swipeViewAdapter.setData(noticeBeans); + } + + protected void initEvent() { + QMUIRVItemSwipeAction swipeAction = new QMUIRVItemSwipeAction(true, new QMUIRVItemSwipeAction.Callback() { + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + swipeViewAdapter.remove(viewHolder.getAdapterPosition()); + } + + @Override + public int getSwipeDirection(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return QMUIRVItemSwipeAction.SWIPE_LEFT; + } + + @Override + public void onClickAction(QMUIRVItemSwipeAction swipeAction, RecyclerView.ViewHolder selected, QMUISwipeAction action) { + super.onClickAction(swipeAction, selected, action); + swipeViewAdapter.remove(selected.getAdapterPosition()); + } + }); + swipeAction.attachToRecyclerView(swipeRecyclerView); + swipeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + }); + swipeRecyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + swipeRecyclerView.setAdapter(swipeViewAdapter); + swipeViewAdapter.setOnItemClickListener(new SwipeViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看之后,未读消息变为已读消息 + NoticeBean noticeBean = noticeBeans.get(position); + Intent intent = new Intent(context, NoticeActivity.class); + intent.putExtra("noticeBeanJson", new Gson().toJson(noticeBean)); + startActivity(intent); + } + }); + } + + private List getTestData() { + List beans = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setNoticeTitle("移动城管APP升级完成了" + i); + noticeBean.setNoticeDate(getTime()); + noticeBean.setNoticeContent("移动城管APP升级完成了,欢迎下载使用"); + beans.add(noticeBean); + } + return beans; + } + + private String getTime() { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + return formatter.format(date); + } +} 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 e346e1d..899d916 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -26,7 +26,8 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; + Manifest.permission.RECORD_AUDIO, + Manifest.permission.CALL_PHONE}; public static final int SELECT_PICTURE_CODE = 9001; 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 c5e0e37..d371eb7 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -26,6 +26,14 @@ return (String) SaveKeyValues.getValue("userDept", ""); } + public static void saveUserDeptId(String deptid) { + SaveKeyValues.putValue("userDeptId", deptid); + } + + public static String getUserDeptId() { + return (String) SaveKeyValues.getValue("userDeptId", ""); + } + public static boolean isLetterAndDigit(String str) { boolean isDigit = false; boolean isLetter = false; diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 26c505c..e11fe9e 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -3,8 +3,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -80,4 +82,19 @@ Observable changePassword(@Header("token") String token, @Field("oldPwd") String oldPwd, @Field("newPwd") String newPwd); + + /** + * 获取部门树 + */ + @GET("/dept/tree") + Observable obtainDeptTree(@Header("token") String token, + @Query("pid") String pid); + + /** + * 获取通讯录 + */ + @FormUrlEncoded + @POST("/mgr/mobileList") + Observable obtainPhoneBook(@Header("token") String token, + @Field("deptid") String deptid); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 1477a0c..3e256bd 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -5,8 +5,10 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; @@ -127,4 +129,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); } + + /** + * 获取部门树 + */ + public static Observable getDeptTreeResult(String pid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainDeptTree(TokenHelper.getToken(), pid); + } + + /** + * 获取通讯录 + */ + public static Observable getPhoneBookResult(String deptid) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainPhoneBook(TokenHelper.getToken(), deptid); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java new file mode 100644 index 0000000..62ce22f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/NoScrollViewPager.java @@ -0,0 +1,73 @@ +package com.casic.dcms.widgets; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * @author : Pengxh + * @time : 2021/4/14 18:35 + * @email : 290677893@qq.com + **/ +public class NoScrollViewPager extends ViewPager { + + private boolean isScroll; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // return false;//可行,不拦截事件, + // return true;//不行,孩子无法处理事件 + //return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent ev) { + //return false;// 可行,不消费,传给父控件 + //return true;// 可行,消费,拦截事件 + if (isScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean scroll) { + isScroll = scroll; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_right_64.xml b/app/src/main/res/drawable/ic_right_64.xml new file mode 100644 index 0000000..153e3ea --- /dev/null +++ b/app/src/main/res/drawable/ic_right_64.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml deleted file mode 100644 index 79d695f..0000000 --- a/app/src/main/res/drawable/ic_right_80.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/layout_divider_vertical.xml b/app/src/main/res/drawable/layout_divider_vertical.xml new file mode 100644 index 0000000..d7f4987 --- /dev/null +++ b/app/src/main/res/drawable/layout_divider_vertical.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..e82f94c --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..91213fc --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..c049f3d --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0b4f0d5 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3ef79ef..50eabb9 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -286,8 +286,6 @@ android:visibility="gone" /> - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a567af8..45f3e3d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:fitsSystemWindows="true" /> - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 5fb2176..af0e508 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -17,14 +17,13 @@ android:orientation="vertical" android:padding="@dimen/padding_10dp"> - + @@ -41,14 +40,13 @@ - + @@ -65,13 +63,12 @@ - + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index b22fabb..1e51cd8 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -1,7 +1,25 @@ - + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b4c4ff3..b02e54b 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -13,14 +13,14 @@ + style="@style/itemLayoutStyle"> @@ -29,20 +29,20 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -52,20 +52,19 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + style="@style/itemLayoutStyle"> @@ -75,20 +74,40 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:background="@drawable/ic_right_80" /> + android:background="@drawable/ic_right_64" /> + + + + + + + + + + style="@style/itemLayoutStyle"> diff --git a/app/src/main/res/layout/fragment_phone.xml b/app/src/main/res/layout/fragment_phone.xml index c96a2e9..c8d2a17 100644 --- a/app/src/main/res/layout/fragment_phone.xml +++ b/app/src/main/res/layout/fragment_phone.xml @@ -1,7 +1,11 @@ - + android:background="@color/white"> - \ No newline at end of file + + \ 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 new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/fragment_read.xml @@ -0,0 +1,7 @@ + + + + \ 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 new file mode 100644 index 0000000..cf20840 --- /dev/null +++ b/app/src/main/res/layout/fragment_unread.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_child_list.xml b/app/src/main/res/layout/item_child_list.xml new file mode 100644 index 0000000..7be1918 --- /dev/null +++ b/app/src/main/res/layout/item_child_list.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_group_list.xml b/app/src/main/res/layout/item_group_list.xml new file mode 100644 index 0000000..810d886 --- /dev/null +++ b/app/src/main/res/layout/item_group_list.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_notice_list.xml b/app/src/main/res/layout/item_notice_list.xml new file mode 100644 index 0000000..753003e --- /dev/null +++ b/app/src/main/res/layout/item_notice_list.xml @@ -0,0 +1,33 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9869d92..6db8b57 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -21,4 +21,11 @@ wrap_content @dimen/padding_10dp + +