SoFunction
Updated on 2025-03-11

Simple chat software for Android development

Suitable for android development. It is a simple chat software, including knowledge points, application of various controls (ExpandableListView, ViewPager, Spinner, LinearLayout, RelativeLayot), custom ViaImageView (custom xml properties), writing, reading and other operations of SQL.

1.    

package ;
 
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
 
/**
 * Created by FarinaZhang on 2016/5/25.
 */
public class ViaImageView extends ImageView {
 private int shapeType=-1;
 private int borderWidth=0; //the image 's border width
 private int borderColor= ; //the image 's border color
 private boolean useDefaultStyle =false; //draw a common imageview
 private static final Xfermode MASK_XFERMODE;
 private int AnimType=-1; //Animation type private int mWidth; //The width of the picture private int mHeight; //The height of the picture 
 static {
  localMode = .DST_IN;
 MASK_XFERMODE = new PorterDuffXfermode(localMode);
 }
 
 public static enum Shape {circle,triangle,star,hexagonal,rectangle};
 
 public ViaImageView(Context context){
 super(context);
 init(context, null, 0);
 }
 public ViaImageView(Context context, AttributeSet attrs){
 super(context, attrs);
 init(context, attrs, 0);
 }
 public ViaImageView(Context context,AttributeSet attrs,int defStyle){
 super(context, attrs, defStyle);
 init(context, attrs, defStyle);
 }
 
 public void init(Context context,AttributeSet attrs,int defStyle){
 
 
 if(attrs!=null){
  TypedArray a = getContext().obtainStyledAttributes(
   attrs,, defStyle, 0);
  shapeType = (int)(.viaImage_shapeType,shapeType);
  borderWidth=(int)(.viaImage_borderWidth,borderWidth);
  borderColor = (.viaImage_borderColor, borderColor);
 
  ();
 
 }
 }
 
 /**
  *External interface
  *Set the properties of ImageView, including shape, border color, border width
  **/
 public void setImageViewProperty(int shapeType,int width,int color){
  = shapeType;
  = width;
  = color;
 
 postInvalidate();
 }
 
 public void setImageViewShape(int shapeType){
  = shapeType;
 
 postInvalidate();
 }
 
 public void setImageBorderWidth(int width){
  = width;
 postInvalidate();
 }
 public void setImageBorderColor(int color){
  = color;
 postInvalidate();
 }
 
 
 /** External interface
  * Set whether to draw in the default format, normal format
  */
 public void setDrawCommonImage(boolean isCommon){
 =isCommon;
 }
 
 @Override
 protected void onDraw(Canvas canvas){
 if(useDefaultStyle){
  (canvas);
  return;
 }
 final Drawable localDrawable=getDrawable();
 if(localDrawable==null)return;
 if(localDrawable instanceof NinePatchDrawable)return;
 
 mWidth=getWidth();
 mHeight=getHeight();
 
 int layer=(0.0f,0.0f,mWidth,mHeight,null,Canvas.ALL_SAVE_FLAG);
 (0,0,mWidth,mHeight);
 /*Bind drawable to bitmap() (drawable can only be displayed through bitmap)*/
 (canvas);
 
 createShapeBitmap(canvas);
 
 /*Copy the canvas to layer*/
 (layer);
 
 if(borderWidth!=0){
  drawBorder(canvas);
 }
 
 }
 private void createShapeBitmap(Canvas canvas){
 Paint mypaint;
 
 mypaint = new Paint();
 (false);
 (true);
 (MASK_XFERMODE);
 
   localConfig=.ARGB_8888;
  Bitmap localBitmap=(mWidth,mHeight,localConfig);
  Canvas localCanvas=new Canvas(localBitmap);
  Paint localPaint = new Paint();
  (true);
  int padding=borderWidth;
  int radius = ((mWidth>mHeight)?mHeight:mWidth)/2-padding;
 
  switch(shapeType){
  case 0://Round;  {
   (mWidth/2,mHeight/2, radius, localPaint);
   break;
  }
  case 1://triangle;  {
   Path path = new Path();
   (padding, padding);
   (mWidth / 2, (float)(mWidth*(degree2Radian(30))-padding));
   (mWidth-padding, padding);
 
   ();
   (path, localPaint);
   break;
  }
  case 2://Pentagonal star;  {
   Path path = new Path();
   float radian = degree2Radian(36);// 36 is the angle of the five-pointed star   float radius_in = (float) (radius * (radian / 2) / Math
    .cos(radian)); // The radius of the middle pentagon 
   ((float) (radius * (radian / 2)), 0);// This point is the starting point of the polygon   ((float) (radius * (radian / 2) + radius_in
     * (radian)),
    (float) (radius - radius * (radian / 2)));
   ((float) (radius * (radian / 2) * 2),
    (float) (radius - radius * (radian / 2)));
   ((float) (radius * (radian / 2) + radius_in
     * (radian / 2)),
    (float) (radius + radius_in * (radian / 2)));
   (
    (float) (radius * (radian / 2) + radius
     * (radian)), (float) (radius + radius
     * (radian)));
   ((float) (radius * (radian / 2)),
    (float) (radius + radius_in));
   (
    (float) (radius * (radian / 2) - radius
     * (radian)), (float) (radius + radius
     * (radian)));
   ((float) (radius * (radian / 2) - radius_in
     * (radian / 2)),
    (float) (radius + radius_in * (radian / 2)));
   (0, (float) (radius - radius * (radian / 2)));
   ((float) (radius * (radian / 2) - radius_in
     * (radian)),
    (float) (radius - radius * (radian / 2)));
 
   ();// Make these points form a closed polygon   (path, localPaint);
   break;
  }
  case 3://Regular hexagon;  {
   Path path= new Path();
   float radian = degree2Radian(30);
   ((float)(radius*(radian)), 0);
   ((float)(radius*(radian)+radius), 0);
   ((float)(2*radius), (float)(radius*(radian)) );
   ((float)(radius*(radian)+radius),(float)(2*(radius*(radian))));
   ((float)(radius*(radian)),(float)(2*(radius*(radian))));
   (0,(float)(radius*(radian)));
   ();
   (path,localPaint);
   break;
  }
  default://Square  {
   int realWidth = (mWidth>mHeight)?mHeight:mWidth;
   int x = padding +(mWidth-realWidth)/2;
   int y = padding +(mHeight-realWidth)/2;
   RectF localRectF=new RectF(x, y, realWidth-padding*2, realWidth-padding*2);
   (localRectF, localPaint);
   break;
  }
  }
 
 
 /*Draw bitmap on canvas*/
 (localBitmap,0.0f,0.0f,mypaint);
 }
 
 //Draw border private void drawBorder(Canvas canvas){
 Paint localPaint = new Paint();
 (borderColor);
 ();
 (borderWidth);
 (true);
 
 int radius=((mWidth>mHeight)?mHeight:mWidth)/2-borderWidth/2;
 int padding = borderWidth/2;
 switch(shapeType){
  case 0://Round;  {
  (mWidth/2, mHeight/2,radius,localPaint);
  break;
  }
  case 1://triangle;  {
  Path path = new Path();
  (padding, padding);
  (mWidth / 2, (float)(mWidth*(degree2Radian(30))-padding));
  (mWidth-padding, padding);
 
  ();
  (path, localPaint);
  break;
  }
  case 2://Pentagonal star;  {
  Path path = new Path();
  float radian = degree2Radian(36);// 36 is the angle of the five-pointed star  float radius_in = (float) (radius * (radian / 2) / Math
   .cos(radian)); // The radius of the middle pentagon 
  ((float) (radius * (radian / 2)), 0);// This point is the starting point of the polygon  ((float) (radius * (radian / 2) + radius_in
    * (radian)),
   (float) (radius - radius * (radian / 2)));
  ((float) (radius * (radian / 2) * 2),
   (float) (radius - radius * (radian / 2)));
  ((float) (radius * (radian / 2) + radius_in
    * (radian / 2)),
   (float) (radius + radius_in * (radian / 2)));
  (
   (float) (radius * (radian / 2) + radius
    * (radian)), (float) (radius + radius
    * (radian)));
  ((float) (radius * (radian / 2)),
   (float) (radius + radius_in));
  (
   (float) (radius * (radian / 2) - radius
    * (radian)), (float) (radius + radius
    * (radian)));
  ((float) (radius * (radian / 2) - radius_in
    * (radian / 2)),
   (float) (radius + radius_in * (radian / 2)));
  (0, (float) (radius - radius * (radian / 2)));
  ((float) (radius * (radian / 2) - radius_in
    * (radian)),
   (float) (radius - radius * (radian / 2)));
 
  ();// Make these points form a closed polygon  (path, localPaint);
  break;
  }
  case 3://Regular hexagon;  {
  Path path= new Path();
  float radian = degree2Radian(30);
  ((float)(radius*(radian)), 0);
  ((float)(radius*(radian)+radius), 0);
  ((float)(2*radius), (float)(radius*(radian)) );
  ((float)(radius*(radian)+radius),(float)(2*(radius*(radian))));
  ((float)(radius*(radian)),(float)(2*(radius*(radian))));
  (0,(float)(radius*(radian)));
  ();
  (path,localPaint);
  break;
  }
  default://Square  {
  int realWidth = (mWidth>mHeight)?mHeight:mWidth-borderWidth;
  int x = padding +(mWidth-realWidth)/2;
  int y = padding +(mHeight-realWidth)/2;
  RectF localRectF=new RectF(x, y, realWidth-padding*2, realWidth-padding*2);
  (localRectF, localPaint);
  break;
  }
 }
 }
 
 //Convert angle to radian private float degree2Radian(int degree) {
 // TODO Auto-generated method stub
 return (float) ( * degree / 180);
 }
 
 
 
}

2.

package ;
 
import ;
import ;
import ;
import ;
import ;
import ;
import ;
 
import ;
import ;
import ;
import ;
 
import ;
 
/**
 * Created by FarinaZhang on 2016/7/5.
 */
public class ContactExpendListAdapter extends BaseExpandableListAdapter {
 private Context mContext;
 private List<FriendListData> mListData;
 
 
 public ContactExpendListAdapter(Context context, List<FriendListData> data){
 mContext = context;
 mListData = data;
 }
 @Override
 public int getGroupCount(){
 return ();
 }
 @Override
 public int getChildrenCount(int groupPosition){
 return (groupPosition).getFriendChildList().size();
 }
 @Override
 public Object getGroup(int groupPosition){
 return (groupPosition).getGroupName();
 }
 @Override
 public Object getChild(int groupPosition, int childPosition){
 return (groupPosition).getFriendChildList().get(childPosition);
 }
 @Override
 public long getGroupId(int groupPosition){
 return groupPosition;
 }
 @Override
 public long getChildId(int groupPosition, int childPosition){
 return childPosition;
 }
 @Override
 public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent){
 groupHolder viewHolder =null;
 if(convertView == null){
  convertView = (mContext).inflate(.contact_list_group, null);
  viewHolder = new groupHolder();
   = (ImageView)();
   = (TextView)(.goup_name);
  (viewHolder);
 }else{
  viewHolder = (groupHolder)();
 }
 
 ((groupPosition).getGroupName());
 if(isExpanded){
  (.arrow_down);
 }else{
  (.arrow_up);
 }
 
 return convertView;
 }
 @Override
 public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
    View convertView, ViewGroup parent){
 memberHolder viewHolder = null;
 if(convertView == null){
  convertView = (mContext).inflate(.contact_list_member, null);
 
  viewHolder= new memberHolder();
   = (ViaImageView) (.member_img);
   = (TextView)(.member_name);
  (viewHolder);
 }else{
  viewHolder =(memberHolder)();
 }
 FriendEntity entity= (groupPosition).getFriendChildList().get(childPosition);
 String icnPath = ();
 if(icnPath == null||()<=0) {
  (().getDrawable(.user_img));
 }
 (());
 return convertView;
 }
 @Override
 public boolean isChildSelectable(int groupPosition,
     int childPosition) {
 return true;
 }
 
 @Override
 public boolean hasStableIds(){
 return true;
 }
 
 private class memberHolder{
 ViaImageView memberImg;
 TextView memberName;
 }
 private class groupHolder{
 ImageView icon;
 TextView groupName;
 }
 
}

3.

package ;
 
import ;
import ;
import ;
import ;
 
import ;
import ;
import ;
import ;
import ;
 
import ;
import ;
 
/**
 * Created by FarinaZhang on 2016/7/14.
 */
public class ChatInfoManager {
 private Context mContext;
 private ChatDBhelper mDBHelper;
 
 //table user string
 private final String USER_TABLE_NAME="users";
 private final String USER_ID="id";
 private final String USER_COUNT_NUMBER="countNumber";
 private final String USER_NIKENAME="nikeName";
 private final String USER_ICON_PATH="iconPath";
 private final String USER_PHONE_NUMBER="phoneNumber";
 private final String USER_MAIL_ADDR="mailAddr";
 private final String USER_QQ_NUMBER="qqNumber";
 private final String USER_WEIXIN_NUMBER="weixinNumber";
 
 //table friends string
 private final String FRIEND_TABLE_NAME="friends";
 private final String FRIEND_ID="id";
 private final String FRIEND_HOST_ID="hostId";
 private final String FRIEND_GROUP_ID="groupId";
 private final String FRIEND_NAME="friendName";
 private final String FRIEND_ICON_PATH="iconPath";
 private final String FRIEND_BELIVE="beLive";
 
 //table groups string
 private final String GROUP_TABLE_NAME="groups";
 private final String GROUP_ID="id";
 private final String GROUP_HOST_ID="hostId";
 private final String GROUP_NAME="groupName";
 
 //table messages string
 private final String MESSAGE_TABLE_NAME="messages";
 private final String MESSAGE_ID="id";
 private final String MESSAGE_MESSAGE="message";
 private final String MESSAGE_FROM_ID="fromId";
 private final String MESSAGE_TO_ID="toId";
 private final String MESSAGE_READED="readed";
 private final String MESSAGE_TYPE="type";
 private final String MESSAGE_TIME="time";
 
 public ChatInfoManager(Context context){
 mContext = context;
 mDBHelper = (mContext);
 
 }
 public void addUser(UserEntity user){
 
 SQLiteDatabase db = null;
 try {
  db = ();
  ContentValues values = new ContentValues();
  (USER_ID,());
  (USER_COUNT_NUMBER,());
  (USER_NIKENAME,());
  (USER_ICON_PATH,());
  (USER_PHONE_NUMBER,());
  (USER_MAIL_ADDR,());
  (USER_QQ_NUMBER,());
  (USER_WEIXIN_NUMBER,());
  (USER_TABLE_NAME, null, values);
 
 } catch (Exception e) {
  ();
  // TODO: handle exception
 } finally {
  ();
 }
 }
 
 public UserEntity getUserData(int index){
 UserEntity user= new UserEntity();
 SQLiteDatabase db =null;
 Cursor cursor = null;
 
 try {
  db = ();
  cursor = (USER_TABLE_NAME, null, USER_ID + "=" + index, null, null, null, null);
  if (cursor != null) {
  (index);
  (((USER_COUNT_NUMBER)));
  (((USER_NIKENAME)));
  (((USER_ICON_PATH)));
  (((USER_PHONE_NUMBER)));
  (((USER_MAIL_ADDR)));
  (((USER_QQ_NUMBER)));
  (((USER_WEIXIN_NUMBER)));
  } else {
  return null;
  }
 }catch (Exception e){
  ();
 }finally{
  ();
 }
 return user;
 }
 public List<UserEntity> getUserList(){
 List<UserEntity> list =new ArrayList<UserEntity>();
 SQLiteDatabase db =null;
 Cursor cursor=null;
 
 try{
  db=();
  cursor=(USER_TABLE_NAME,new String[]{USER_ID,USER_COUNT_NUMBER,USER_NIKENAME,USER_ICON_PATH},null,null,null,null,null);
  if(cursor!=null){
  while (()) {
   UserEntity user= new UserEntity();
 
   (((USER_ID)));
   (((USER_COUNT_NUMBER)));
   (((USER_NIKENAME)));
   (((USER_ICON_PATH)));
   (user);
  }
  }
 }catch(Exception e){
  ();
 }finally{
  ();
 }
 return list;
 
 }
 
 public void addFriend(FriendEntity friend){
 SQLiteDatabase db=null;
 
 try{
  db=();
  if(db==null)return ;
 
  ContentValues values = new ContentValues();
  (FRIEND_ID,());
  (FRIEND_HOST_ID,());
  (FRIEND_GROUP_ID,());
  (FRIEND_NAME,());
  (FRIEND_ICON_PATH,());
  (FRIEND_BELIVE,());
 
  (FRIEND_TABLE_NAME,null,values);
 }catch(Exception e){
  ();
 }finally {
  ();
 }
 }
 
 public List<FriendListData> getFriendList(){
 SQLiteDatabase db=null;
 List<FriendListData> friendList=new ArrayList<FriendListData>();
 List<GroupEntity> groupList= getGroupList();
 
 try{
  db = ();
  if (db == null) return null;
  for(int i=0;i<();i++) {
  FriendListData friendGroup= new FriendListData();
  String groupName = (i).getName();
  (groupName);
 
  List<FriendEntity> groupChild=new ArrayList<FriendEntity>();
 
  Cursor cursor = (FRIEND_TABLE_NAME, null, GROUP_NAME+"="+groupName, null, null, FRIEND_ID + "ASC", null);
  while (()) {
   FriendEntity entity = new FriendEntity();
   (((FRIEND_ID)));
   (((FRIEND_GROUP_ID)));
   (((FRIEND_HOST_ID)));
   (((FRIEND_NAME)));
   (((FRIEND_ICON_PATH)));
   String beLive = ((FRIEND_BELIVE));
   (("1"));
   (entity);
  }
  (groupChild);
  (friendGroup);
  }
 
 }catch(Exception e){
  ();
 }finally {
  ();
 }
 return friendList;
 }
 
 public List<GroupEntity> getGroupList(){
 List<GroupEntity> groupList = null;
 SQLiteDatabase db=null;
 
 try{
  db= ();
  Cursor cursor =(GROUP_TABLE_NAME,null,null,null,null,null,null);
  while(()){
  GroupEntity entity =new GroupEntity();
  (((GROUP_ID)));
  (((GROUP_HOST_ID)));
  (((GROUP_NAME)));
 
  (entity);
  }
 }catch(Exception e){
  ();
 }finally{
  ();
 }
 return groupList;
 }
 
 public void addGroupMember(GroupEntity group){
 SQLiteDatabase db=null;
 
 try{
  db=();
  ContentValues values=new ContentValues();
  (GROUP_ID,());
  (GROUP_HOST_ID,());
  (GROUP_NAME,());
  (GROUP_TABLE_NAME,null,values);
 }catch(Exception e){
  ();
 }finally {
  ();
 }
 }
 
 public List<MessageEntity> getMessageList(String loadId){
 List<MessageEntity> list = new ArrayList<MessageEntity>();
 SQLiteDatabase db=null;
 Cursor cursor=null;
 try{
  db=();
 
  cursor=(MESSAGE_TABLE_NAME,null,
   MESSAGE_FROM_ID+"=?,"+MESSAGE_TO_ID+"=?",
   new String[]{loadId},
   null,
   loadId,MESSAGE_TIME+"DES",null);
  while(()){
  MessageEntity entity =new MessageEntity();
  (((MESSAGE_ID)));
  (((MESSAGE_FROM_ID)));
  (((MESSAGE_TO_ID)));
  (((MESSAGE_MESSAGE)));
  (((MESSAGE_TYPE)));
  (((MESSAGE_TIME)));
 
  (entity);
  }
 
 }catch (Exception e){
  ();
 }finally{
  ();
 }
 
 return list;
 }
 
 public void setMessageItem(MessageEntity message){
 SQLiteDatabase db=null;
 
 try{
  db=();
  if(db==null)return;
 
  ContentValues values = new ContentValues();
  (MESSAGE_ID,());
  (MESSAGE_FROM_ID,());
  (MESSAGE_TO_ID,());
  (MESSAGE_MESSAGE,());
  (MESSAGE_TYPE,());
  (MESSAGE_TIME,());
  (MESSAGE_TABLE_NAME,null,values);
 }catch(Exception e){
  ();
 }finally {
  ();
 }
 }
 
}

Source codedownloadaddress

The above is all the content of this article. I hope it will be helpful to everyone's study and I hope everyone will support me more.