gongpm 9 vuotta sitten
vanhempi
commit
2bcb9f85d9

+ 5 - 2
WeiChat/src/main/AndroidManifest.xml

@@ -222,7 +222,8 @@ b
             android:name="com.baidu.location.f"
             android:enabled="true"
             android:process=":remote" />
-  <meta-data
+
+        <meta-data
             android:name="com.baidu.lbsapi.API_KEY"
             android:value="KxANrz9HRWVqGGCm2cN8mXarpW0bBuYA" />
         <!-- 文件选择的activity -->
@@ -386,7 +387,9 @@ b
         </receiver>
 
         <activity android:name=".ui.erp.activity.CompanyActivity" />
-        <activity android:name=".ui.erp.activity.BaseInfoActivity"/>
+        <activity android:name=".ui.erp.activity.BaseInfoActivity" />
+        <activity android:name=".ui.message.SelectActivity" >
+        </activity>
     </application>
 
 </manifest>

+ 14 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MucChatActivity.java

@@ -106,7 +106,7 @@ public class MucChatActivity extends ActionBackActivity
     private boolean isGroupChat;// 是否是群聊
     private static String MUC_ChAT_ACT = "MucChatActivity";
     private boolean isError = false;
-
+    public static  final int RETURN_CODE=108;
     private Friend mFriend;
     private ChatMessage instantMessage;
     private String instantFilePath;// 转发文件传过来的path
@@ -252,6 +252,8 @@ public class MucChatActivity extends ActionBackActivity
         botton_ll = (LinearLayout) findViewById(R.id.botton_ll);
         mChatBottomView = (ChatBottomView) findViewById(R.id.chat_bottom_view);
         mChatBottomView.setChatBottomListener(this);
+        mChatBottomView.isMuc(true);
+        mChatBottomView.roomId(mFriend.getRoomId());
         tv_none.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
@@ -281,6 +283,7 @@ public class MucChatActivity extends ActionBackActivity
         });
 
     }
+
     private void onDeleteMore() {
         List<Integer> ints = mChatContentView.getInts();
         ArrayList<ChatMessage> messages = new ArrayList<>();
@@ -327,8 +330,8 @@ public class MucChatActivity extends ActionBackActivity
         if (item.getItemId() == R.id.room_info) {
             Intent intent = new Intent(this, RoomInfoActivity.class);
             intent.putExtra(AppConstant.EXTRA_USER_ID, mUseId);
-            if (mNickName!=null&&mNickName.length()>0)
-            intent.putExtra(RoomInfoActivity.ROOM_NAME, mNickName);
+            if (mNickName != null && mNickName.length() > 0)
+                intent.putExtra(RoomInfoActivity.ROOM_NAME, mNickName);
             startActivity(intent);
             return true;
         }
@@ -430,8 +433,8 @@ public class MucChatActivity extends ActionBackActivity
                             Toast.makeText(MucChatActivity.this, "文件解析错误", Toast.LENGTH_SHORT).show();
                         }
                     }
-					/*
-					 * else if(messageType==XmppMessage.TYPE_CARD){
+                    /*
+                     * else if(messageType==XmppMessage.TYPE_CARD){
 					 * sendCard(instantMessage.getObjectId()); }
 					 */
                     instantMessage = null;
@@ -527,7 +530,7 @@ public class MucChatActivity extends ActionBackActivity
         }
         mHasSend = true;
         message.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));
-        if (isGroupChat && !TextUtils.isEmpty(mFriend.getRoomMyNickName())&&message.getType()!=XmppMessage.TYPE_CARD) {
+        if (isGroupChat && !TextUtils.isEmpty(mFriend.getRoomMyNickName()) && message.getType() != XmppMessage.TYPE_CARD) {
             message.setFromUserName(mFriend.getRoomMyNickName());
         }
         ChatMessageDao.getInstance().saveNewSingleChatMessage(mLoginUserId, mUseId, message);
@@ -551,7 +554,7 @@ public class MucChatActivity extends ActionBackActivity
         Map<String, Object> params = new HashMap<String, Object>();
         params.put("text", JSON.toJSONString(str));
         params.put("body", body);
-        params.put("roomid",mFriend.getRoomId());
+        params.put("roomid", mFriend.getRoomId());
         Log.i("push", "推送百度 from:" + from + "to:" + to + "body:" + body + "text:" +
                 JSON.toJSONString(str));
         ViewUtil.httpSendRequest(this, url, params, mHandler, null, 5, null, null, "get");
@@ -1014,6 +1017,10 @@ public class MucChatActivity extends ActionBackActivity
 //            message.setContent(MyApplication.getInstance().mLoginUser.getSex() + "");// 性别
 //            // 0表示女,1表示男
 //            sendMessage(message);
+        } else if (requestCode == RETURN_CODE && resultCode == RETURN_CODE) {
+            String nameReturn = data.getStringExtra("NickName");
+            String userId = data.getStringExtra("UserId");   //获取到的userid
+            mChatBottomView.addEditView(nameReturn);
         }
     }
 

+ 1 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/RoomInfoActivity.java

@@ -234,6 +234,7 @@ public class RoomInfoActivity extends BaseActivity {
         HashMap<String, String> params = new HashMap<String, String>();
         params.put("access_token", MyApplication.getInstance().mAccessToken);
         params.put("roomId", mRoom.getRoomId());
+        Log.i("gongpengming", mRoom.getRoomId());
         Log.d("wang", "mAccessToken::" + MyApplication.getInstance().mAccessToken + "roomId" + mRoom.getRoomId());
         StringJsonObjectRequest<MucRoom> request = new StringJsonObjectRequest<MucRoom>(mConfig.ROOM_GET, new ErrorListener() {
             @Override

+ 191 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/SelectActivity.java

@@ -0,0 +1,191 @@
+package com.xzjmyk.pm.activity.ui.message;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.android.volley.Request;
+import com.android.volley.Response;
+import com.android.volley.VolleyError;
+import com.xzjmyk.pm.activity.AppConfig;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.bean.message.MucRoom;
+import com.xzjmyk.pm.activity.bean.message.MucRoomMember;
+import com.xzjmyk.pm.activity.helper.AvatarHelper;
+import com.xzjmyk.pm.activity.util.ToastUtil;
+import com.xzjmyk.pm.activity.view.ClearEditText;
+import com.xzjmyk.pm.activity.volley.FastVolley;
+import com.xzjmyk.pm.activity.volley.ObjectResult;
+import com.xzjmyk.pm.activity.volley.Result;
+import com.xzjmyk.pm.activity.volley.StringJsonObjectRequest;
+
+import java.util.HashMap;
+import java.util.List;
+
+public class SelectActivity extends AppCompatActivity {
+
+    private String HASHCODE;
+    private ClearEditText editText;
+    private ListView listView;
+    private String roomId;
+    private AppConfig mConfig;
+    private FastVolley mFastVolley;
+    private Adapter adapter;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_select);
+
+        initView();
+    }
+
+    private List<MucRoomMember> mMember;
+    private List<MucRoomMember> mMembers;
+
+    private void initView() {
+        roomId = getIntent().getStringExtra("roomId");
+        editText = (ClearEditText) findViewById(R.id.search_edit);
+        listView = (ListView) findViewById(R.id.listview);
+        init();
+        loadMembers();
+        editText.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+                int length = charSequence.length();
+                String name;
+                String anme;
+                mMembers.clear();
+                for (int k = 0; k < mMember.size(); k++) {
+                    name = mMember.get(k).getNickName();
+                    anme = name.substring(0, (name.length() > length ? length : name.length()));
+                    if (anme.equals(charSequence.toString())) {
+                        Log.i("gongpengming","anme="+anme+"  name="+name);
+                        mMembers.add(mMember.get(k));
+                    }else{
+                        Log.i("gongpengming","anme="+anme+"  name="+name);
+                    }
+                }
+                adapter.notifyDataSetChanged();
+            }
+
+            @Override
+            public void afterTextChanged(Editable editable) {
+
+            }
+        });
+    }
+
+    private void init() {
+        mConfig = MyApplication.getInstance().getConfig();
+        mFastVolley = MyApplication.getInstance().getFastVolley();
+        HASHCODE = Integer.toHexString(this.hashCode()) + "@";// 加上@符号,将拼在一起的两个HashCode分开
+
+    }
+
+    private void loadMembers() {
+        HashMap<String, String> params = new HashMap<String, String>();
+        params.put("access_token", MyApplication.getInstance().mAccessToken);
+        params.put("roomId", roomId);
+        StringJsonObjectRequest<MucRoom> request = new StringJsonObjectRequest<MucRoom>(mConfig.ROOM_GET, new Response.ErrorListener() {
+            @Override
+            public void onErrorResponse(VolleyError arg0) {
+                ToastUtil.showErrorNet(SelectActivity.this);
+            }
+        }, new StringJsonObjectRequest.Listener<MucRoom>() {
+            @Override
+            public void onResponse(ObjectResult<MucRoom> result) {
+                boolean success = Result.defaultParser(SelectActivity.this, result, true);
+                if (success && result.getData() != null) {
+                    mMembers = result.getData().getMembers();
+                    mMember = result.getData().getMembers();
+                    updataUI();
+                } else {
+
+                }
+            }
+        }, MucRoom.class, params);
+        addDefaultRequest(request);
+    }
+
+    private void updataUI() {
+        if (mMembers != null && mMembers.size() > 0) {
+            adapter = new Adapter();
+            listView.setAdapter(adapter);
+            adapter.notifyDataSetChanged();
+        } else {
+            ToastUtil.showToast(this, "为空的哟");
+        }
+        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
+                //TODO 点击时候返回数据
+                Intent intent = new Intent();
+                intent.putExtra("NickName", mMembers.get(i).getNickName());
+                intent.putExtra("UserId", mMembers.get(i).getUserId());
+                setResult(MucChatActivity.RETURN_CODE, intent);
+                finish();
+            }
+        });
+    }
+
+    public void addDefaultRequest(Request<?> request) {
+        mFastVolley.addDefaultRequest(HASHCODE, request);
+    }
+
+    class Adapter extends BaseAdapter {
+        @Override
+        public int getCount() {
+            return mMembers.size();
+        }
+
+        @Override
+        public Object getItem(int i) {
+            return mMembers.get(i);
+        }
+
+        @Override
+        public long getItemId(int i) {
+            return i;
+        }
+
+        @Override
+        public View getView(int i, View view, ViewGroup viewGroup) {
+            ViewHolder viewHolder = null;
+            if (view == null) {
+                viewHolder = new ViewHolder();
+                view = LayoutInflater.from(SelectActivity.this).inflate(R.layout.item_mmenber, null);
+                viewHolder.img = (ImageView) view.findViewById(R.id.avatar_img);
+                viewHolder.tvName = (TextView) view.findViewById(R.id.name);
+                view.setTag(viewHolder);
+            } else {
+                viewHolder = (ViewHolder) view.getTag();
+            }
+            AvatarHelper.getInstance().displayAvatar(mMembers.get(i).getUserId(), viewHolder.img, false);// 目前在备注名放房间的创建者Id
+            viewHolder.tvName.setText(mMembers.get(i).getNickName());
+            return view;
+        }
+
+        class ViewHolder {
+            ImageView img;
+            TextView tvName;
+        }
+    }
+}

+ 430 - 395
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/ChatBottomView.java

@@ -2,6 +2,7 @@ package com.xzjmyk.pm.activity.view;
 
 import android.annotation.SuppressLint;
 import android.content.Context;
+import android.content.Intent;
 import android.os.Handler;
 import android.text.Editable;
 import android.text.SpannableString;
@@ -18,12 +19,14 @@ import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.Toast;
 
-import com.xzjmyk.pm.activity.audio.RecordListener;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.audio.IMRecordController;
+import com.xzjmyk.pm.activity.audio.RecordListener;
+import com.xzjmyk.pm.activity.ui.base.ActionBackActivity;
+import com.xzjmyk.pm.activity.ui.message.MucChatActivity;
+import com.xzjmyk.pm.activity.ui.message.SelectActivity;
 
 /**
- * 
  * @项目名称: SkWeiChat-Baidu
  * @包名: com.xzjmyk.pm.activity.view
  * @作者:王阳
@@ -36,398 +39,430 @@ import com.xzjmyk.pm.activity.audio.IMRecordController;
  */
 public class ChatBottomView extends LinearLayout implements View.OnClickListener {
 
-	private Context mContext;
-	private ImageButton mEmotionBtn;
-	private ImageButton mMoreBtn;
-	private EditText mChatEdit;
-	private Button mRecordBtn;
-	private Button mSendBtn;
-	private ImageButton mVoiceImgBtn;
-
-	private ChatFaceView mChatFaceView;
-	/* Tool */
-	private View mChatToolsView;
-
-	private InputMethodManager mInputManager;
-	private Handler mHandler = new Handler();
-
-	private int mDelayTime = 0;
-
-	private IMRecordController mRecordController;
-	private ChatBottomListener mBottomListener;
-
-	public ChatBottomView(Context context) {
-		super(context);
-		init(context);
-	}
-
-	public ChatBottomView(Context context, AttributeSet attrs) {
-		super(context, attrs);
-		init(context);
-	}
-
-	@SuppressLint("NewApi")
-	public ChatBottomView(Context context, AttributeSet attrs, int defStyle) {
-		super(context, attrs, defStyle);
-		init(context);
-	}
-
-	private static final int RIGHT_VIEW_RECORD = 0;
-	private static final int RIGHT_VIEW_SNED = 1;
-	private int mRightView = RIGHT_VIEW_RECORD;// 当前右边的模式,用int变量保存,效率更高点
-
-	private void init(Context context) {
-		mContext = context;
-		mInputManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
-		mDelayTime = mContext.getResources().getInteger(android.R.integer.config_shortAnimTime);
-
-		LayoutInflater.from(mContext).inflate(R.layout.chat_bottom, this);
-
-		mEmotionBtn = (ImageButton) findViewById(R.id.emotion_btn);
-		mMoreBtn = (ImageButton) findViewById(R.id.more_btn);
-		mChatEdit = (EditText) findViewById(R.id.chat_edit);
-		mRecordBtn = (Button) findViewById(R.id.record_btn);
-		mSendBtn = (Button) findViewById(R.id.send_btn);
-		mVoiceImgBtn = (ImageButton) findViewById(R.id.voice_img_btn);
-
-		mChatFaceView = (ChatFaceView) findViewById(R.id.chat_face_view);
-		mChatToolsView = (View) findViewById(R.id.chat_tools_view);
-		/* Tool */
-		findViewById(R.id.im_photo_tv).setOnClickListener(this);
-		findViewById(R.id.im_camera_tv).setOnClickListener(this);
-		findViewById(R.id.im_video_tv).setOnClickListener(this);
-		findViewById(R.id.im_audio_tv).setOnClickListener(this);
-		findViewById(R.id.im_file_tv).setOnClickListener(this);
-		findViewById(R.id.im_loc_tv).setOnClickListener(this);
-		findViewById(R.id.im_card_tv).setOnClickListener(this);
-		findViewById(R.id.im_videochat_tv).setOnClickListener(this);
-
-		mEmotionBtn.setOnClickListener(this);
-		mMoreBtn.setOnClickListener(this);
-		mVoiceImgBtn.setOnClickListener(this);
-		mSendBtn.setOnClickListener(this);
-		mChatEdit.setOnClickListener(this);
-
-		mChatEdit.setOnTouchListener(new OnTouchListener() {
-			@Override
-			public boolean onTouch(View v, MotionEvent event) {
-				mChatEdit.requestFocus();
-				return false;
-			}
-		});
-
-		mChatEdit.addTextChangedListener(new TextWatcher() {
-			@Override
-			public void onTextChanged(CharSequence s, int start, int before, int count) {
-				int currentView = 0;
-				if (s.length() <= 0) {
-					currentView = RIGHT_VIEW_RECORD;
-				} else {
-					currentView = RIGHT_VIEW_SNED;
-				}
-
-				if (currentView == mRightView) {
-					return;
-				}
-				mRightView = currentView;
-				if (mRightView == 0) {
-					mVoiceImgBtn.setVisibility(View.VISIBLE);
-					mSendBtn.setVisibility(View.GONE);
-				} else {
-					mVoiceImgBtn.setVisibility(View.GONE);
-					mSendBtn.setVisibility(View.VISIBLE);
-				}
-			}
-
-			@Override
-			public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-			}
-
-			@Override
-			public void afterTextChanged(Editable s) {
-
-			}
-		});
-
-		mRecordController = new IMRecordController(mContext);
-		mRecordController.setRecordListener(new RecordListener() {
-			@Override
-			public void onRecordSuccess(String filePath, int timeLen) {
-				// 录音成功,返回录音文件的路径
-				mRecordBtn.setText(R.string.motalk_voice_chat_tip_1);
-				mRecordBtn.setBackgroundResource(R.drawable.im_voice_button_normal);
-				if(timeLen<1){
-					Toast.makeText(mContext, "录音太短了,我还没听清楚呢", Toast.LENGTH_SHORT).show();
-					return;
-				}
-				if (mBottomListener != null) {
-					mBottomListener.sendVoice(filePath, timeLen);
-				}
-			}
-
-			@Override
-			public void onRecordStart() {
-				mBottomListener.stopVoicePlay();//停止播放聊天记录里的语音
-				// 录音开始
-				mRecordBtn.setText(R.string.motalk_voice_chat_tip_2);
-				mRecordBtn.setBackgroundResource(R.drawable.im_voice_button_pressed);
-			}
-
-			@Override
-			public void onRecordCancel() {
-				// 录音取消
-				mRecordBtn.setText(R.string.motalk_voice_chat_tip_1);
-				mRecordBtn.setBackgroundResource(R.drawable.im_voice_button_normal);
-			}
-		});
-		mRecordBtn.setOnTouchListener(mRecordController);
-
-		mChatFaceView.setEmotionClickListener(new ChatFaceView.EmotionClickListener() {
-			@Override
-			public void onNormalFaceClick(SpannableString ss) {
-				if (mChatEdit.hasFocus()) {
-					mChatEdit.getText().insert(mChatEdit.getSelectionStart(), ss);
-				} else {
-					mChatEdit.getText().insert(mChatEdit.getText().toString().length(), ss);
-				}
-			}
-
-			@Override
-			public void onGifFaceClick(String resName) {
-				// 发送GIF图片的回调
-				if (mBottomListener != null) {
-					mBottomListener.sendGif(resName);
-				}
-			}
-		});
-
-	}
-
-	@Override
-	public void onWindowFocusChanged(boolean hasWindowFocus) {
-		mChatEdit.setFocusable(hasWindowFocus);
-		mChatEdit.setFocusableInTouchMode(hasWindowFocus);
-		super.onWindowFocusChanged(hasWindowFocus);
-	}
-
-	/**
-	 * 改变录音按钮的状态<br/>
-	 * 1、当处于非录音状态,显示录音按钮<br/>
-	 * true的状态 2、当处于录音状态,显示键盘按钮<br/>
-	 * false的状态
-	 */
-	private void changeRecordBtn(boolean show) {
-		boolean isShowing = mRecordBtn.getVisibility() != View.GONE;
-		if (isShowing == show) {
-			return;
-		}
-		if (show) {
-			mChatEdit.setVisibility(View.GONE);
-			mRecordBtn.setVisibility(View.VISIBLE);
-			mVoiceImgBtn.setImageResource(R.drawable.im_keyboard_nor);
-		} else {
-			mChatEdit.setVisibility(View.VISIBLE);
-			mRecordBtn.setVisibility(View.GONE);
-			mVoiceImgBtn.setImageResource(R.drawable.im_send_button_inactive_u);
-		}
-	}
-
-	/**
-	 * 改变更多按钮的状态<br/>
-	 * 1、当更多布局显示时,显示隐藏按钮<br/>
-	 * false的状态 2、当更多布局隐藏时,显示更多按钮<br/>
-	 * true的状态
-	 */
-	private void changeChatToolsView(boolean show) {
-		boolean isShowing = mChatToolsView.getVisibility() != View.GONE;
-		if (isShowing == show) {
-			return;
-		}
-		if (show) {
-			mChatToolsView.setVisibility(View.VISIBLE);
-			mMoreBtn.setBackgroundResource(R.drawable.im_btn_collapse_bg);
-		} else {
-			mChatToolsView.setVisibility(View.GONE);
-			mMoreBtn.setBackgroundResource(R.drawable.im_btn_more_bg);
-		}
-	}
-
-	/**
-	 * 显示或隐藏表情布局
-	 * 
-	 * @param show
-	 */
-	private void changeChatFaceView(boolean show) {
-		boolean isShowing = mChatFaceView.getVisibility() != View.GONE;
-		if (isShowing == show) {
-			return;
-		}
-		if (show) {
-			mChatFaceView.setVisibility(View.VISIBLE);
-			mEmotionBtn.setBackgroundResource(R.drawable.im_btn_keyboard_bg);
-		} else {
-			mChatFaceView.setVisibility(View.GONE);
-			mEmotionBtn.setBackgroundResource(R.drawable.im_btn_emotion_bg);
-		}
-	}
-
-	@Override
-	public void onClick(View v) {
-		switch (v.getId()) {
-		/*************************** 控制底部栏状态变化 **************************/
-		case R.id.emotion_btn:
-			if (mChatFaceView.getVisibility() != View.GONE) {// 表情布局在显示,那么点击则是隐藏表情,显示键盘
-				mInputManager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
-				changeChatFaceView(false);
-			} else {// 表情布局没有显示,那么点击则是显示表情,隐藏键盘、录音、更多布局
-				mInputManager.hideSoftInputFromWindow(mChatEdit.getApplicationWindowToken(), 0);
-				mHandler.postDelayed(new Runnable() {
-					@Override
-					public void run() {
-						changeChatFaceView(true);
-						changeChatToolsView(false);
-						changeRecordBtn(false);
-					}
-				}, mDelayTime);
-			}
-			break;
-		case R.id.more_btn:
-			if (mChatToolsView.getVisibility() != View.GONE) {// 表情布局在显示,那么点击则是隐藏表情,显示键盘
-				mInputManager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
-				changeChatToolsView(false);
-			} else {// 更多布局没有显示,那么点击则是显示更多,隐藏表情、录音、键盘布局
-				mInputManager.hideSoftInputFromWindow(mChatEdit.getApplicationWindowToken(), 0);
-				mHandler.postDelayed(new Runnable() {
-					@Override
-					public void run() {
-						changeChatFaceView(false);
-						changeChatToolsView(true);
-						changeRecordBtn(false);
-					}
-				}, mDelayTime);
-			}
-			break;
-		case R.id.chat_edit:// 隐藏其他所有布局,显示键盘
-			changeChatFaceView(false);
-			changeChatToolsView(false);
-			changeRecordBtn(false);
-			break;
-		case R.id.voice_img_btn:
-			if (mRecordBtn.getVisibility() != View.GONE) {// 录音布局在显示,那么点击则是隐藏录音,显示键盘
-				mInputManager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
-				changeRecordBtn(false);
-			} else {// 录音布局没有显示,那么点击则是显示录音,隐藏表情、更多、键盘布局
-				mInputManager.hideSoftInputFromWindow(mChatEdit.getApplicationWindowToken(), 0);
-				mHandler.postDelayed(new Runnable() {
-					@Override
-					public void run() {
-						changeChatFaceView(false);
-						changeChatToolsView(false);
-						changeRecordBtn(true);
-					}
-				}, mDelayTime);
-			}
-			break;
-
-		/*************************** 底部栏事件回调 **************************/
-		case R.id.send_btn:// 发送文字的回调
-			if (mBottomListener != null) {
-				String msg = mChatEdit.getText().toString().trim();
-				if (TextUtils.isEmpty(msg)) {
-					return;
-				}
-				mBottomListener.sendText(msg);
-				mChatEdit.setText("");
-			}
-			break;
-
-		/********** Chat Tool View 的事件 *********/
-
-		case R.id.im_photo_tv:// 选择图片的回调
-			if (mBottomListener != null) {
-				mBottomListener.clickPhoto();
-			}
-			break;
-		case R.id.im_camera_tv:// 照相的回调
-			if (mBottomListener != null) {
-				mBottomListener.clickCamera();
-			}
-			break;
-		case R.id.im_video_tv:// 视频通话
-			if (mBottomListener != null) {
-				mBottomListener.clickVideo();
-			}
-			break;
-		case R.id.im_audio_tv:// 语音通话
-			if (mBottomListener != null) {
-				mBottomListener.clickAudio();
-			}
-			break;
-		case R.id.im_videochat_tv:// 视频通话
-			if (mBottomListener != null) {
-				mBottomListener.clickVideoChat();
-			}
-			break;
-		case R.id.im_file_tv:// 发送文件
-			if (mBottomListener != null) {
-				mBottomListener.clickFile();
-			}
-			break;
-		case R.id.im_loc_tv:// 地理位置
-			if (mBottomListener != null) {
-				mBottomListener.clickLocation();
-			}
-			break;
-		case R.id.im_card_tv:// card
-			if (mBottomListener != null) {
-				mBottomListener.clickCard();
-			}
-			break;
-		}
-
-	}
-
-	public void reset() {
-		changeChatFaceView(false);
-		changeChatToolsView(false);
-		changeRecordBtn(false);
-		mInputManager.hideSoftInputFromWindow(mChatEdit.getApplicationWindowToken(), 0);
-	}
-
-	public void setChatBottomListener(ChatBottomListener listener) {
-		mBottomListener = listener;
-	}
-
-	public static interface ChatBottomListener {
-		public void stopVoicePlay();
-
-		public void clickVideoChat();
-
-		public void sendText(String text);
-
-		public void sendGif(String text);
-
-		public void sendVoice(String filePath, int timeLen);
-
-		public void clickPhoto();
-
-		public void clickCamera();
-
-		public void clickVideo();
-
-		public void clickAudio();
-
-		public void clickFile();
-
-		public void clickLocation();
-
-		public void clickCard();
-	}
-
-	public void recordCancel() {
-		if (mRecordController != null) {
-			mRecordController.cancel();
-		}
-	}
+    private ActionBackActivity mContext;
+    private ImageButton mEmotionBtn;
+    private ImageButton mMoreBtn;
+    private EditText mChatEdit;
+    private Button mRecordBtn;
+    private Button mSendBtn;
+    private ImageButton mVoiceImgBtn;
+
+    private ChatFaceView mChatFaceView;
+    /* Tool */
+    private View mChatToolsView;
+
+    private InputMethodManager mInputManager;
+    private Handler mHandler = new Handler();
+
+    private int mDelayTime = 0;
+
+    private IMRecordController mRecordController;
+    private ChatBottomListener mBottomListener;
+    private String roomId;
+
+    public ChatBottomView(Context context) {
+        super(context);
+        init(context);
+    }
+
+    public ChatBottomView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init(context);
+    }
+
+    @SuppressLint("NewApi")
+    public ChatBottomView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        init(context);
+    }
+
+    private int length = 0;
+    private static final int RIGHT_VIEW_RECORD = 0;
+    private static final int RIGHT_VIEW_SNED = 1;
+    private int mRightView = RIGHT_VIEW_RECORD;// 当前右边的模式,用int变量保存,效率更高点
+
+    private void init(final Context context) {
+        mContext = (ActionBackActivity) context;
+        mInputManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
+        mDelayTime = mContext.getResources().getInteger(android.R.integer.config_shortAnimTime);
+
+        LayoutInflater.from(mContext).inflate(R.layout.chat_bottom, this);
+
+        mEmotionBtn = (ImageButton) findViewById(R.id.emotion_btn);
+        mMoreBtn = (ImageButton) findViewById(R.id.more_btn);
+        mChatEdit = (EditText) findViewById(R.id.chat_edit);
+        mRecordBtn = (Button) findViewById(R.id.record_btn);
+        mSendBtn = (Button) findViewById(R.id.send_btn);
+        mVoiceImgBtn = (ImageButton) findViewById(R.id.voice_img_btn);
+
+        mChatFaceView = (ChatFaceView) findViewById(R.id.chat_face_view);
+        mChatToolsView = (View) findViewById(R.id.chat_tools_view);
+        /* Tool */
+        findViewById(R.id.im_photo_tv).setOnClickListener(this);
+        findViewById(R.id.im_camera_tv).setOnClickListener(this);
+        findViewById(R.id.im_video_tv).setOnClickListener(this);
+        findViewById(R.id.im_audio_tv).setOnClickListener(this);
+        findViewById(R.id.im_file_tv).setOnClickListener(this);
+        findViewById(R.id.im_loc_tv).setOnClickListener(this);
+        findViewById(R.id.im_card_tv).setOnClickListener(this);
+        findViewById(R.id.im_videochat_tv).setOnClickListener(this);
+
+        mEmotionBtn.setOnClickListener(this);
+        mMoreBtn.setOnClickListener(this);
+        mVoiceImgBtn.setOnClickListener(this);
+        mSendBtn.setOnClickListener(this);
+        mChatEdit.setOnClickListener(this);
+
+        mChatEdit.setOnTouchListener(new OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                mChatEdit.requestFocus();
+                return false;
+            }
+        });
+
+        mChatEdit.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                if (isMuc) {
+                    if (s.length() > length) {
+                        if (s.charAt(s.length() - 1) == '@') {
+                            Intent intent = new Intent(context, SelectActivity.class);
+                            intent.putExtra("roomId", roomId);
+                            ((ActionBackActivity) context).startActivityForResult(intent, MucChatActivity.RETURN_CODE);
+                        }
+                    }
+                    length = s.length();
+                }
+                int currentView = 0;
+                if (s.length() <= 0) {
+                    currentView = RIGHT_VIEW_RECORD;
+                } else {
+                    currentView = RIGHT_VIEW_SNED;
+                }
+
+                if (currentView == mRightView) {
+                    return;
+                }
+                mRightView = currentView;
+                if (mRightView == 0) {
+                    mVoiceImgBtn.setVisibility(View.VISIBLE);
+                    mSendBtn.setVisibility(View.GONE);
+                } else {
+                    mVoiceImgBtn.setVisibility(View.GONE);
+                    mSendBtn.setVisibility(View.VISIBLE);
+                }
+            }
+
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
+
+        mRecordController = new IMRecordController(mContext);
+        mRecordController.setRecordListener(new RecordListener() {
+            @Override
+            public void onRecordSuccess(String filePath, int timeLen) {
+                // 录音成功,返回录音文件的路径
+                mRecordBtn.setText(R.string.motalk_voice_chat_tip_1);
+                mRecordBtn.setBackgroundResource(R.drawable.im_voice_button_normal);
+                if (timeLen < 1) {
+                    Toast.makeText(mContext, "录音太短了,我还没听清楚呢", Toast.LENGTH_SHORT).show();
+                    return;
+                }
+                if (mBottomListener != null) {
+                    mBottomListener.sendVoice(filePath, timeLen);
+                }
+            }
+
+            @Override
+            public void onRecordStart() {
+                mBottomListener.stopVoicePlay();//停止播放聊天记录里的语音
+                // 录音开始
+                mRecordBtn.setText(R.string.motalk_voice_chat_tip_2);
+                mRecordBtn.setBackgroundResource(R.drawable.im_voice_button_pressed);
+            }
+
+            @Override
+            public void onRecordCancel() {
+                // 录音取消
+                mRecordBtn.setText(R.string.motalk_voice_chat_tip_1);
+                mRecordBtn.setBackgroundResource(R.drawable.im_voice_button_normal);
+            }
+        });
+        mRecordBtn.setOnTouchListener(mRecordController);
+
+
+        mChatFaceView.setEmotionClickListener(new ChatFaceView.EmotionClickListener()
+
+                                              {
+                                                  @Override
+                                                  public void onNormalFaceClick(SpannableString ss) {
+                                                      if (mChatEdit.hasFocus()) {
+                                                          mChatEdit.getText().insert(mChatEdit.getSelectionStart(), ss);
+                                                      } else {
+                                                          mChatEdit.getText().insert(mChatEdit.getText().toString().length(), ss);
+                                                      }
+                                                  }
+
+                                                  @Override
+                                                  public void onGifFaceClick(String resName) {
+                                                      // 发送GIF图片的回调
+                                                      if (mBottomListener != null) {
+                                                          mBottomListener.sendGif(resName);
+                                                      }
+                                                  }
+                                              }
+
+        );
+
+    }
+
+    public void addEditView(String ss) {
+        mChatEdit.append(ss+" ");
+    }
+
+    private boolean isMuc = false;
+
+    public void isMuc(boolean isMuc) {
+        this.isMuc = isMuc;
+    }
+
+    public void roomId(String roomId) {
+        this.roomId = roomId;
+    }
+
+    @Override
+    public void onWindowFocusChanged(boolean hasWindowFocus) {
+        mChatEdit.setFocusable(hasWindowFocus);
+        mChatEdit.setFocusableInTouchMode(hasWindowFocus);
+        super.onWindowFocusChanged(hasWindowFocus);
+    }
+
+    /**
+     * 改变录音按钮的状态<br/>
+     * 1、当处于非录音状态,显示录音按钮<br/>
+     * true的状态 2、当处于录音状态,显示键盘按钮<br/>
+     * false的状态
+     */
+    private void changeRecordBtn(boolean show) {
+        boolean isShowing = mRecordBtn.getVisibility() != View.GONE;
+        if (isShowing == show) {
+            return;
+        }
+        if (show) {
+            mChatEdit.setVisibility(View.GONE);
+            mRecordBtn.setVisibility(View.VISIBLE);
+            mVoiceImgBtn.setImageResource(R.drawable.im_keyboard_nor);
+        } else {
+            mChatEdit.setVisibility(View.VISIBLE);
+            mRecordBtn.setVisibility(View.GONE);
+            mVoiceImgBtn.setImageResource(R.drawable.im_send_button_inactive_u);
+        }
+    }
+
+    /**
+     * 改变更多按钮的状态<br/>
+     * 1、当更多布局显示时,显示隐藏按钮<br/>
+     * false的状态 2、当更多布局隐藏时,显示更多按钮<br/>
+     * true的状态
+     */
+    private void changeChatToolsView(boolean show) {
+        boolean isShowing = mChatToolsView.getVisibility() != View.GONE;
+        if (isShowing == show) {
+            return;
+        }
+        if (show) {
+            mChatToolsView.setVisibility(View.VISIBLE);
+            mMoreBtn.setBackgroundResource(R.drawable.im_btn_collapse_bg);
+        } else {
+            mChatToolsView.setVisibility(View.GONE);
+            mMoreBtn.setBackgroundResource(R.drawable.im_btn_more_bg);
+        }
+    }
+
+    /**
+     * 显示或隐藏表情布局
+     *
+     * @param show
+     */
+    private void changeChatFaceView(boolean show) {
+        boolean isShowing = mChatFaceView.getVisibility() != View.GONE;
+        if (isShowing == show) {
+            return;
+        }
+        if (show) {
+            mChatFaceView.setVisibility(View.VISIBLE);
+            mEmotionBtn.setBackgroundResource(R.drawable.im_btn_keyboard_bg);
+        } else {
+            mChatFaceView.setVisibility(View.GONE);
+            mEmotionBtn.setBackgroundResource(R.drawable.im_btn_emotion_bg);
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()) {
+            /*************************** 控制底部栏状态变化 **************************/
+            case R.id.emotion_btn:
+                if (mChatFaceView.getVisibility() != View.GONE) {// 表情布局在显示,那么点击则是隐藏表情,显示键盘
+                    mInputManager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
+                    changeChatFaceView(false);
+                } else {// 表情布局没有显示,那么点击则是显示表情,隐藏键盘、录音、更多布局
+                    mInputManager.hideSoftInputFromWindow(mChatEdit.getApplicationWindowToken(), 0);
+                    mHandler.postDelayed(new Runnable() {
+                        @Override
+                        public void run() {
+                            changeChatFaceView(true);
+                            changeChatToolsView(false);
+                            changeRecordBtn(false);
+                        }
+                    }, mDelayTime);
+                }
+                break;
+            case R.id.more_btn:
+                if (mChatToolsView.getVisibility() != View.GONE) {// 表情布局在显示,那么点击则是隐藏表情,显示键盘
+                    mInputManager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
+                    changeChatToolsView(false);
+                } else {// 更多布局没有显示,那么点击则是显示更多,隐藏表情、录音、键盘布局
+                    mInputManager.hideSoftInputFromWindow(mChatEdit.getApplicationWindowToken(), 0);
+                    mHandler.postDelayed(new Runnable() {
+                        @Override
+                        public void run() {
+                            changeChatFaceView(false);
+                            changeChatToolsView(true);
+                            changeRecordBtn(false);
+                        }
+                    }, mDelayTime);
+                }
+                break;
+            case R.id.chat_edit:// 隐藏其他所有布局,显示键盘
+                changeChatFaceView(false);
+                changeChatToolsView(false);
+                changeRecordBtn(false);
+                break;
+            case R.id.voice_img_btn:
+                if (mRecordBtn.getVisibility() != View.GONE) {// 录音布局在显示,那么点击则是隐藏录音,显示键盘
+                    mInputManager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
+                    changeRecordBtn(false);
+                } else {// 录音布局没有显示,那么点击则是显示录音,隐藏表情、更多、键盘布局
+                    mInputManager.hideSoftInputFromWindow(mChatEdit.getApplicationWindowToken(), 0);
+                    mHandler.postDelayed(new Runnable() {
+                        @Override
+                        public void run() {
+                            changeChatFaceView(false);
+                            changeChatToolsView(false);
+                            changeRecordBtn(true);
+                        }
+                    }, mDelayTime);
+                }
+                break;
+
+            /*************************** 底部栏事件回调 **************************/
+            case R.id.send_btn:// 发送文字的回调
+                if (mBottomListener != null) {
+                    String msg = mChatEdit.getText().toString().trim();
+                    if (TextUtils.isEmpty(msg)) {
+                        return;
+                    }
+                    mBottomListener.sendText(msg);
+                    mChatEdit.setText("");
+                }
+                break;
+
+            /********** Chat Tool View 的事件 *********/
+
+            case R.id.im_photo_tv:// 选择图片的回调
+                if (mBottomListener != null) {
+                    mBottomListener.clickPhoto();
+                }
+                break;
+            case R.id.im_camera_tv:// 照相的回调
+                if (mBottomListener != null) {
+                    mBottomListener.clickCamera();
+                }
+                break;
+            case R.id.im_video_tv:// 视频通话
+                if (mBottomListener != null) {
+                    mBottomListener.clickVideo();
+                }
+                break;
+            case R.id.im_audio_tv:// 语音通话
+                if (mBottomListener != null) {
+                    mBottomListener.clickAudio();
+                }
+                break;
+            case R.id.im_videochat_tv:// 视频通话
+                if (mBottomListener != null) {
+                    mBottomListener.clickVideoChat();
+                }
+                break;
+            case R.id.im_file_tv:// 发送文件
+                if (mBottomListener != null) {
+                    mBottomListener.clickFile();
+                }
+                break;
+            case R.id.im_loc_tv:// 地理位置
+                if (mBottomListener != null) {
+                    mBottomListener.clickLocation();
+                }
+                break;
+            case R.id.im_card_tv:// card
+                if (mBottomListener != null) {
+                    mBottomListener.clickCard();
+                }
+                break;
+        }
+
+    }
+
+    public void reset() {
+        changeChatFaceView(false);
+        changeChatToolsView(false);
+        changeRecordBtn(false);
+        mInputManager.hideSoftInputFromWindow(mChatEdit.getApplicationWindowToken(), 0);
+    }
+
+    public void setChatBottomListener(ChatBottomListener listener) {
+        mBottomListener = listener;
+    }
+
+    public static interface ChatBottomListener {
+        public void stopVoicePlay();
+
+        public void clickVideoChat();
+
+        public void sendText(String text);
+
+        public void sendGif(String text);
+
+        public void sendVoice(String filePath, int timeLen);
+
+        public void clickPhoto();
+
+        public void clickCamera();
+
+        public void clickVideo();
+
+        public void clickAudio();
+
+        public void clickFile();
+
+        public void clickLocation();
+
+        public void clickCard();
+
+    }
+
+    public void recordCancel() {
+        if (mRecordController != null) {
+            mRecordController.cancel();
+        }
+    }
 
 }

+ 38 - 0
WeiChat/src/main/res/layout/activity_select.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context="com.xzjmyk.pm.activity.ui.message.SelectActivity">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="48dp"
+        android:background="@drawable/bg_bar"
+        android:orientation="horizontal"
+        android:paddingBottom="5dp"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp"
+        android:paddingTop="5dp">
+
+        <com.xzjmyk.pm.activity.view.ClearEditText
+            android:id="@+id/search_edit"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent"
+            android:layout_centerVertical="true"
+            android:background="@drawable/search_input"
+            android:drawableLeft="@drawable/search"
+            android:drawableRight="@drawable/search_clear"
+            android:hint="@string/search"
+            android:textColor="@color/dark_grey"
+            android:textColorHint="@color/grey"
+            android:textSize="15sp" />
+    </RelativeLayout>
+
+    <ListView
+        android:id="@+id/listview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</LinearLayout>

+ 46 - 0
WeiChat/src/main/res/layout/item_mmenber.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+
+    <RelativeLayout
+        android:id="@+id/rela"
+        style="@style/IMTbleLine_UP">
+
+        <ImageView
+            android:id="@+id/avatar_img"
+            android:layout_width="38dp"
+            android:layout_height="38dp"
+            android:layout_centerVertical="true"
+            android:contentDescription="@string/app_name"
+            android:src="@drawable/friend_u" />
+
+        <LinearLayout
+            android:id="@+id/info_layout"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="12dp"
+            android:layout_toRightOf="@id/avatar_img"
+            android:gravity="center_vertical"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/name"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:ellipsize="end"
+                android:singleLine="true"
+                android:textColor="@color/text_main"
+                android:textSize="16sp" />
+
+        </LinearLayout>
+    </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@color/item_line" />
+</LinearLayout>