Commit fc9d4725 authored by jianglx's avatar jianglx

修改Im的界面

parent 4f8cea18
......@@ -873,7 +873,7 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa
scrollview.fullScroll(View.FOCUS_UP);
} else if (id == R.id.iv_home_travel_server_image) {
if (isLogin()) {
ComponentName name = new ComponentName(getActivity(), "com.rv.im.ConversationListActivity");
ComponentName name = new ComponentName(getActivity(), "com.rv.im.CustomerListActivity");
Intent intent = new Intent();
intent.putExtra("login_user_id", Cookie.getStringValue(getContext(), SPConstance.USER_JSON_IMUSERID));
intent.setComponent(name);
......
......@@ -140,7 +140,7 @@ public class TravelDetailsActivity extends BaseStatusActivity<TourismPresenter>
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
showTitle(false);
tvTitleCenter.setText("旅游详情");
webUrl = TourismApi.TRAVEL_DETAILS + "?id=" + id + "?v=1";
webUrl = TourismApi.TRAVEL_DETAILS + "?id=" + id + "&v=1";
initWeb();
initRxbus();
if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(url)) {
......
......@@ -7,7 +7,7 @@
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 调用相机权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
<application>
<activity android:name="com.rv.im.ChatActivity" />
......@@ -30,7 +30,7 @@
android:name="com.rv.im.ImService"
android:enabled="true"
android:exported="true" />
<!-- android:process=":im_romote" -->
<!--android:process=":im_romote" /> -->
<service android:name="com.rv.im.call.RecordService" />
......
package com.rv.im;
import android.Manifest;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
......@@ -13,13 +14,16 @@ import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.ruiwenliu.wrapper.base.BaseBean;
......@@ -57,25 +61,18 @@ import pub.devrel.easypermissions.EasyPermissions;
public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements EasyPermissions.PermissionCallbacks, IChatView, ChatMessageListener, View.OnClickListener, RecordListener {
private ImageButton voiceImgBtn;
private ImageButton btnCancelReplay;
private ImageButton ibKeyword;
private EditText chatEdit;
private Button recordBtn;
private LinearLayout leftLayout;
private TextView recordBtn;
private ImageButton emotionBtn; // 表情
private ImageButton moreBtn;
private ImageButton ibPhoto;
private Button sendBtn;
private RecyclerView recycleContent;
private ViewStub chatToolsViewStub;
private ViewStub mChatFaceViewStub;
private String mLoginUserId;
private List<ChatMessage> messages = new ArrayList<>();
private ChatContentAdapter adapter;
private LinearLayout lLMoreSelect;
private IMRecordController mRecordController;
private IChatPresenter presenter;
private ChatFaceView mChatFaceView;
......@@ -212,7 +209,6 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
public static Intent getIntent(Context context, String targetUserId, String targetName) {
Intent intent = new Intent(context, ChatActivity.class);
// intent.putExtra("targetUserId", "10000028");
intent.putExtra("targetUserId", targetUserId);
intent.putExtra("targetName", targetName);
return intent;
......@@ -257,28 +253,38 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
private void initWidget() {
voiceImgBtn = findViewById(R.id.voice_img_btn);
btnCancelReplay = findViewById(R.id.btnCancelReplay);
ibKeyword = findViewById(R.id.ib_keyword);
chatEdit = findViewById(R.id.chat_edit);
recordBtn = findViewById(R.id.record_btn);
leftLayout = findViewById(R.id.left_layout);
emotionBtn = findViewById(R.id.emotion_btn);
moreBtn = findViewById(R.id.more_btn);
ibPhoto = findViewById(R.id.ib_photo);
sendBtn = findViewById(R.id.send_btn);
chatToolsViewStub = findViewById(R.id.chat_tools_view_stub);
// chatToolsViewStub = findViewById(R.id.chat_tools_view_stub);
mChatFaceViewStub = findViewById(R.id.chat_face_view_stub);
recycleContent = findViewById(R.id.recycle_content);
recycleContent.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
adapter = new ChatContentAdapter(getApplicationContext(), mLoginUserId, messages, clickItemListener);
recycleContent.setAdapter(adapter);
recycleContent.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
// super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
// super.onScrolled(recyclerView, dx, dy);
}
});
}
private void initListener() {
chatEdit.addTextChangedListener(watcher);
sendBtn.setOnClickListener(this);
moreBtn.setOnClickListener(this);
ibPhoto.setOnClickListener(this);
voiceImgBtn.setOnClickListener(this);
emotionBtn.setOnClickListener(this);
btnCancelReplay.setOnClickListener(this);
ibKeyword.setOnClickListener(this);
mRecordController = new IMRecordController(this);
mRecordController.setRecordListener(this);
recordBtn.setOnTouchListener(mRecordController);
......@@ -294,18 +300,13 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
}
presenter.sendText(chatEdit.getText().toString().trim());
chatEdit.getEditableText().clear();
} else if (id == R.id.more_btn) {
// changeChatToolsView();
if (isToolsShown()) {// 表情布局在显示,那么点击则是隐藏表情,显示键盘
showKeyboard();
changeChatToolsView(false);
} else {// 更多布局没有显示,那么点击则是显示更多,隐藏表情、录音、键盘布局
} else if (id == R.id.ib_photo) {
openPhotoDialog();
closeKeyboard();
mHandler.postDelayed(() -> {
if (isFaceShown()) {// 表情布局在显示,那么点击则是隐藏表情,显示键盘
closeKeyboard();
mHandler.postDelayed(() -> {
changeChatFaceView(false);
changeChatToolsView(true);
changeRecordBtn(false);
}, 0);
}
} else if (id == R.id.tv_pic) {
......@@ -323,13 +324,14 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
changeChatFaceView(false);
chatEdit.setVisibility(View.GONE);
recordBtn.setVisibility(View.VISIBLE);
btnCancelReplay.setVisibility(View.VISIBLE);
ibKeyword.setVisibility(View.VISIBLE);
voiceImgBtn.setVisibility(View.GONE);
} else if (id == R.id.btnCancelReplay) {
closeKeyboard();
} else if (id == R.id.ib_keyword) {
changeChatFaceView(false);
chatEdit.setVisibility(View.VISIBLE);
recordBtn.setVisibility(View.GONE);
btnCancelReplay.setVisibility(View.GONE);
ibKeyword.setVisibility(View.GONE);
voiceImgBtn.setVisibility(View.VISIBLE);
} else if (id == R.id.tv_file) {
......@@ -350,14 +352,13 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
presenter.realDial(callType, null);
} else if (id == R.id.emotion_btn) {
if (isFaceShown()) {// 表情布局在显示,那么点击则是隐藏表情,显示键盘
showKeyboard();
// showKeyboard();
changeChatFaceView(false);
} else {// 表情布局没有显示,那么点击则是显示表情,隐藏键盘、录音、更多布局
closeKeyboard();
mHandler.postDelayed(() -> {
closeKeyboard();
changeChatFaceView(true);
changeChatToolsView(false);
changeRecordBtn(false);
}, 0);
}
......@@ -368,11 +369,6 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
private int callType;
private void showKeyboard() {
chatEdit.requestFocus();
mInputManager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
}
private boolean isFaceShown() {
return mChatFaceView != null && mChatFaceView.getVisibility() != View.GONE;
}
......@@ -381,8 +377,31 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
mInputManager.hideSoftInputFromWindow(chatEdit.getApplicationWindowToken(), 0);
}
private boolean isToolsShown() {
return lLMoreSelect != null && lLMoreSelect.getVisibility() != View.GONE;
private void openPhotoDialog(){
Dialog bottomDialog = new Dialog(this, R.style.BottomDialog);
View contentView = LayoutInflater.from(this).inflate(R.layout.dialog_select_media, null);
bottomDialog.setContentView(contentView);
ViewGroup.LayoutParams layoutParams = contentView.getLayoutParams();
layoutParams.width = getResources().getDisplayMetrics().widthPixels;
contentView.setLayoutParams(layoutParams);
bottomDialog.getWindow().setGravity(Gravity.BOTTOM);
bottomDialog.getWindow().setWindowAnimations(R.style.BottomDialog_Animation);
bottomDialog.show();
TextView textView = contentView.findViewById(R.id.dialog_select_voice);
textView.setText("拍照");
TextView textView_02 = contentView.findViewById(R.id.dialog_select_video);
textView_02.setText("手机相册");
contentView.findViewById(R.id.dialog_select_cancel).setOnClickListener(v -> bottomDialog.dismiss());
contentView.findViewById(R.id.dialog_select_voice_ll).setOnClickListener(v -> {
isCamera = true;
presenter.clickPicPicker(isCamera);
bottomDialog.dismiss();
});
contentView.findViewById(R.id.dialog_select_video_ll).setOnClickListener(v -> {
isCamera = false;
presenter.clickPicPicker(isCamera);
bottomDialog.dismiss();
});
}
private void changeRecordBtn(boolean show) {
......@@ -405,7 +424,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
* 显示或隐藏表情布局
*/
private void changeChatFaceView(boolean show) {
btnCancelReplay.setVisibility(View.GONE);
ibKeyword.setVisibility(View.GONE);
voiceImgBtn.setVisibility(View.VISIBLE);
boolean isShowing = isFaceShown();
if (isShowing == show) {
......@@ -429,10 +448,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
});
}
mChatFaceView.setVisibility(View.VISIBLE);
emotionBtn.setBackgroundResource(R.drawable.im_btn_keyboard_bg);
// emotionBtn.setBackgroundResource(R.drawable.im_btn_keyboard_bg);
} else {
mChatFaceView.setVisibility(View.GONE);
emotionBtn.setBackgroundResource(R.drawable.im_btn_emotion_bg);
// emotionBtn.setBackgroundResource(R.drawable.im_btn_emotion_bg);
}
}
......@@ -452,7 +471,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
} else if (requestCode == REQUEST_PERMISSION_AUDIO) {
chatEdit.setVisibility(View.GONE);
recordBtn.setVisibility(View.VISIBLE);
btnCancelReplay.setVisibility(View.VISIBLE);
ibKeyword.setVisibility(View.VISIBLE);
voiceImgBtn.setVisibility(View.GONE);
} else if (requestCode == REQUEST_PERMISSION_FILE) {
presenter.clickFile();
......@@ -473,30 +492,6 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
}
}
private void changeChatToolsView(boolean show) {
boolean isShowing = isToolsShown();
if (isShowing == show) {
return;
}
if (show) {
if (lLMoreSelect == null) {
lLMoreSelect = (LinearLayout) chatToolsViewStub.inflate();
lLMoreSelect.findViewById(R.id.tv_photo).setOnClickListener(this);
lLMoreSelect.findViewById(R.id.tv_pic).setOnClickListener(this);
lLMoreSelect.findViewById(R.id.tv_file).setOnClickListener(this);
lLMoreSelect.findViewById(R.id.tv_vilte).setOnClickListener(this);
lLMoreSelect.findViewById(R.id.tv_video).setOnClickListener(this);
}
lLMoreSelect.setVisibility(View.VISIBLE);
moreBtn.setBackgroundResource(R.drawable.im_btn_more_bg);
} else {
lLMoreSelect.setVisibility(View.GONE);
moreBtn.setBackgroundResource(R.drawable.im_btn_more_bg);
}
}
@Override
public void onDestroy() {
super.onDestroy();
......@@ -510,7 +505,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
messages.addAll(lists);
adapter.notifyDataSetChanged();
if (messages.size() > 0) {
recycleContent.scrollToPosition(messages.size() - 1);
recycleContent.smoothScrollToPosition(messages.size() - 1);
}
}
}
......@@ -588,7 +583,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
public void addMessage(ChatMessage message) {
messages.add(message);
adapter.notifyDataSetChanged();
recycleContent.scrollToPosition(adapter.getItemCount() - 1);
recycleContent.smoothScrollToPosition(messages.size() - 1);
}
@Override
......@@ -623,7 +618,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
messages.add(message);
adapter.notifyDataSetChanged();
if (messages.size() > 0) {
recycleContent.scrollToPosition(messages.size() - 1);
recycleContent.smoothScrollToPosition(messages.size() - 1);
}
}
}
......
......@@ -52,6 +52,7 @@ public class ConversationListActivity extends BaseStatusActivity<CommonPresenter
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
ListenerManager.getInstance().addChatMessageListener(this);
ListenerManager.getInstance().addAuthStateChangeListener(this);
switch (XmppConnectionManager.mXMPPCurrentState) {
case 0:
case 1:
......@@ -89,7 +90,6 @@ public class ConversationListActivity extends BaseStatusActivity<CommonPresenter
}
Downloader.getInstance().init(file.getAbsolutePath());
ListenerManager.getInstance().addAuthStateChangeListener(this);
}
......@@ -105,7 +105,7 @@ public class ConversationListActivity extends BaseStatusActivity<CommonPresenter
Iterator<ChatConversation> iterator = lists.iterator();
while (iterator.hasNext()) {
ChatConversation conversation = iterator.next();
ChatMessage message = ChatMessageServiceImp.getInstance(getApplicationContext()).getLastMsg(conversation);
ChatMessage message = ChatMessageServiceImp.getInstance(getApplicationContext()).getLastMsg(conversation.getUserId());
int unRead = ChatMessageServiceImp.getInstance(getApplicationContext()).getUnReadMsg(conversation.getUserId());
conversation.setUnReadMessage(unRead);
if (message != null) {
......@@ -137,6 +137,7 @@ public class ConversationListActivity extends BaseStatusActivity<CommonPresenter
public void onDestroy() {
super.onDestroy();
ListenerManager.getInstance().removeAuthStateChangeListener(this);
ListenerManager.getInstance().removeChatMessageListener(this);
}
@Override
......
package com.rv.im;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
......@@ -14,35 +20,64 @@ import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshView;
import com.rv.im.adapter.CustomerListAdapter;
import com.rv.im.bean.CustomersBean;
import com.rv.im.db.service.ChatConversationServiceImp;
import com.rv.im.db.service.ChatMessageServiceImp;
import com.rv.im.db.service.CustomerServiceImp;
import com.rv.im.db.service.ICustomerService;
import com.rv.im.db.table.ChatConversation;
import com.rv.im.db.table.ChatMessage;
import com.rv.im.db.table.Customer;
import com.rv.im.util.ServiceUtils;
import com.rv.im.xmpp.ListenerManager;
import com.rv.im.xmpp.listener.AuthStateListener;
import com.rv.im.xmpp.listener.ChatMessageListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> implements SimpleRefreshLayout.OnSimpleRefreshListener {
public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> implements SimpleRefreshLayout.OnSimpleRefreshListener, ChatMessageListener {
private SimpleRefreshLayout refreshLayout;
private RecyclerView recyclerView;
private List<Customer> customers = new ArrayList<>();
private CustomerListAdapter adapter = null;
private int testTime = 0;
@Override
protected int setLayout() {
return R.layout.activity_customer_list;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
ListenerManager.getInstance().addChatMessageListener(this);
titleView.setTitle("客服列表");
titleView.setImageResource(R.id.iv_title_right, R.drawable.ic_app_add);
titleView.setChildClickListener(R.id.iv_title_right, v -> {
if (!BuildConfig.DEBUG) return;
testTime += 1;
if (testTime == 5) {
testTime = 0;
if (ServiceUtils.isServiceRunning(CustomerListActivity.this)) {
Toast.makeText(getApplicationContext(), "im服务正在运行", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "im服务挂掉", Toast.LENGTH_SHORT).show();
}
}
});
refreshLayout = findViewById(R.id.refresh);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayout.VERTICAL, false));
adapter = new CustomerListAdapter(customers);
adapter = new CustomerListAdapter(getApplicationContext(), customers);
adapter.setOnItemClickListener((adapter, view, position) -> {
Customer customer = customers.get(position);
startActivity(ChatActivity.getIntent(getApplicationContext(), customer.getImUserId(), customer.getName()));
startActivityForResult(ChatActivity.getIntent(getApplicationContext(), customer.getImUserId(), customer.getName()), 1);
});
refreshLayout.setHeaderView(new SimpleRefreshView(this));
refreshLayout.setOnSimpleRefreshListener(this);
......@@ -60,11 +95,24 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
*/
private void getCustomerList() {
List<Customer> lists = getCustomService().getCustomerLists();
if (lists == null || lists.size() == 0) {
mPresenter.getData(0, ImUrlConfig.HTTP_CUSTOMER_LIST_URL, CustomersBean.class, true);
} else {
if (lists != null && lists.size() > 0) {
for (Customer customer : lists) {
ChatMessage message = ChatMessageServiceImp.getInstance(getApplicationContext()).getLastMsg(customer.getImUserId());
if (message != null) customer.setLastMessageInfo(message);
}
Collections.sort(lists, (o1, o2) -> {
if (o1.getLastMsgTimes() > o2.getLastMsgTimes()) {
return -1;
} else if (o1.getLastMsgTimes() == o2.getLastMsgTimes()) {
return 0;
}
return 1;
});
customers.clear();
customers.addAll(lists);
adapter.notifyDataSetChanged();
} else {
mPresenter.getData(0, ImUrlConfig.HTTP_CUSTOMER_LIST_URL, CustomersBean.class, true);
}
}
......@@ -102,4 +150,27 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
return iCustomerService;
}
@Override
public void onMessageSendStateChange(int messageState, String msgId) {
}
@Override
public void onNewMessage(String fromUserId, ChatMessage message, boolean isGroupMsg) {
getCustomerList();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) { // 刷新UI
getCustomerList();
}
}
@Override
public void onDestroy() {
super.onDestroy();
ListenerManager.getInstance().removeChatMessageListener(this);
}
}
......@@ -26,6 +26,7 @@ import com.rv.im.util.DateUtils;
import com.rv.im.util.SmileyParser;
import com.rv.im.view.RoundImageView;
import java.util.Date;
import java.util.List;
public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
......@@ -36,8 +37,6 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
private SmileyParser parser;
private OnClickItemListener listener;
private long lastTimes = 0L;
public interface OnClickItemListener {
void onClick(int resId, ChatMessage message);
......@@ -123,13 +122,7 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
private void setFromVolteCallContentView(ChatMessage bean, MsgFromVolteCallHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
String content = dealMessageContent(bean.getTimeLen(), bean.getContent());
holder.chatText.setText(content);
holder.chatText.setOnClickListener(v -> {
......@@ -142,13 +135,7 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
private void setFromVideoCallContentView(ChatMessage bean, MsgFromVideoCallHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
String content = dealMessageContent(bean.getTimeLen(), bean.getContent());
// holder.chatText.setText(bean.getContent());
holder.chatText.setText(content);
......@@ -163,13 +150,7 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
private void setToVolteCallContentView(ChatMessage bean, MsgToVolteCallHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
String content = dealMessageContent(bean.getTimeLen(), bean.getContent());
holder.chatText.setText(content);
holder.chatText.setOnClickListener(v -> {
......@@ -181,13 +162,7 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
private void setToVideoCallContentView(ChatMessage bean, MsgToVideoCallHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
String content = dealMessageContent(bean.getTimeLen(), bean.getContent());
holder.chatText.setText(content);
holder.chatText.setOnClickListener(v -> {
......@@ -197,48 +172,33 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
});
}
private void setToTextContentView(ChatMessage bean, MsgToTextHolder viewHolder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
viewHolder.tvSendTime.setVisibility(View.VISIBLE);
viewHolder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
// viewHolder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
viewHolder.chatText.setText(parser.addSmileySpans(deleteHtml(bean.getContent()), true));
private void setToTextContentView(ChatMessage bean, MsgToTextHolder holder) {
showTime(holder.tvSendTime, bean);
holder.chatText.setText(parser.addSmileySpans(deleteHtml(bean.getContent()), true));
if (bean.getMessageStatus() == 0) {
viewHolder.progressBar.setVisibility(View.VISIBLE);
viewHolder.ivFailed.setVisibility(View.GONE);
viewHolder.tvRead.setVisibility(View.GONE);
holder.progressBar.setVisibility(View.VISIBLE);
holder.ivFailed.setVisibility(View.GONE);
holder.tvRead.setVisibility(View.GONE);
} else if (bean.getMessageStatus() == 1) {
viewHolder.progressBar.setVisibility(View.GONE);
viewHolder.ivFailed.setVisibility(View.GONE);
viewHolder.tvRead.setVisibility(View.VISIBLE);
holder.progressBar.setVisibility(View.GONE);
holder.ivFailed.setVisibility(View.GONE);
holder.tvRead.setVisibility(View.VISIBLE);
} else if (bean.getMessageStatus() == 2) {
viewHolder.progressBar.setVisibility(View.GONE);
viewHolder.ivFailed.setVisibility(View.VISIBLE);
viewHolder.tvRead.setVisibility(View.GONE);
holder.progressBar.setVisibility(View.GONE);
holder.ivFailed.setVisibility(View.VISIBLE);
holder.tvRead.setVisibility(View.GONE);
}
viewHolder.ivFailed.setOnClickListener(v -> listener.reSend(bean));
holder.ivFailed.setOnClickListener(v -> listener.reSend(bean));
}
private void setFromTextContentView(ChatMessage bean, MsgFromTextHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
holder.chatText.setText(parser.addSmileySpans(deleteHtml(bean.getContent()), true));
}
private void setFromCardContentView(ChatMessage bean, MsgFromCardHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
if (!TextUtils.isEmpty(bean.getContent()) && bean.getContent().endsWith("png")
|| bean.getContent().endsWith("jpg") || bean.getContent().endsWith("gif")) {
GlideOptions options = GlideOptions.placeholderOf(R.mipmap.default_error).
......@@ -267,13 +227,7 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
private void setToCardContentView(ChatMessage bean, MsgToCardHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
if (bean.getFilePath().endsWith("png") || bean.getFilePath().endsWith("jpg") || bean.getFilePath().endsWith("gif")) {
GlideOptions options = GlideOptions.placeholderOf(R.mipmap.default_error).
error(R.mipmap.default_error).skipMemoryCache(false);
......@@ -321,14 +275,7 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
}
private void setToPicContentView(ChatMessage bean, MsgToPicHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
if (!TextUtils.isEmpty(bean.getFilePath())) {
GlideOptions options = GlideOptions.placeholderOf(R.mipmap.default_error).
error(R.mipmap.default_error).skipMemoryCache(false);
......@@ -370,14 +317,7 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
private void setFromPicContentView(ChatMessage bean, MsgFromPicHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
if (!TextUtils.isEmpty(bean.getContent())) {
GlideOptions options = GlideOptions.placeholderOf(R.mipmap.default_error).
error(R.mipmap.default_error).skipMemoryCache(false);
......@@ -392,18 +332,7 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
}
private void setFromVoiceContentView(ChatMessage bean, MsgFromVoiceHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
if (bean.getVoiceStatus() == 0) {
holder.imgState.setVisibility(View.VISIBLE);
} else {
holder.imgState.setVisibility(View.GONE);
}
showTime(holder.tvSendTime, bean);
holder.chatVoiceAnimView.setOnClickListener(v -> {
VoicePlayer.instance().playVoice(holder.chatVoiceAnimView);
ChatMessageServiceImp.getInstance(mContext).setVoicePlay(bean.getPackId());
......@@ -416,13 +345,7 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
}
private void setToVoiceContentView(ChatMessage bean, MsgToVoiceHolder holder) {
// if (bean.getTimeSend() - lastTimes > 300000) {
holder.tvSendTime.setVisibility(View.VISIBLE);
holder.tvSendTime.setText(DateUtils.timestampToString1(bean.getTimeSend()));
// } else {
//// holder.tvSendTime.setVisibility(View.GONE);
// }
lastTimes = bean.getTimeSend();
showTime(holder.tvSendTime, bean);
holder.chatVoiceAnimView.setOnClickListener(v ->
VoicePlayer.instance().playVoice(holder.chatVoiceAnimView));
if (!TextUtils.isEmpty(bean.getFilePath())) {
......@@ -790,4 +713,46 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
}
return content;
}
private void showTime(TextView timeView, ChatMessage message) {
if (messageList.indexOf(message) == 0) {
timeView.setVisibility(View.VISIBLE);
showTimeForm(timeView, message.getTimeSend());
// timeView.setText(DateUtils.timestampToString1(message.getTimeSend()));
} else {
int position = messageList.indexOf(message);
ChatMessage prev = messageList.get(position - 1);
if (prev != null && message.getTimeSend() - prev.getTimeSend() > 300000) {
timeView.setVisibility(View.VISIBLE);
// timeView.setText(DateUtils.timestampToString1(message.getTimeSend()));
showTimeForm(timeView, message.getTimeSend());
} else {
timeView.setVisibility(View.GONE);
}
}
}
/********
* 日期显示的格式
* @param view
* @param time
*/
private void showTimeForm(TextView view, long time) {
// 判断是否是今天 是今天就显示上午/下午 + 时间
// 判断是否是昨天的 ,是就显示昨天 + 时间
// 判断是否这一周,如果是,就显示周几+时间
// 判断是否这一年,如果是今年,就显示月-日 时:分
// 显示年-月-日 时:分
Date date = new Date(time);
if (DateUtils.isToday(date)) { // 是否今天
view.setText(DateUtils.getTodayTime(date));
} else if (DateUtils.isYesterday(time)) {
view.setText(DateUtils.getYesterdayTime(date));
} else if (DateUtils.isThisYear(date)) {
view.setText(DateUtils.timestampToString6(time));
} else {
view.setText(DateUtils.timestampToString1(time));
}
}
}
package com.rv.im.adapter;
import android.content.Context;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.rv.im.R;
import com.rv.im.db.table.Customer;
import com.rv.im.util.SmileyParser;
import java.util.List;
public class CustomerListAdapter extends BaseQuickAdapter<Customer, BaseViewHolder> {
public CustomerListAdapter(@Nullable List<Customer> data) {
private SmileyParser parser;
public CustomerListAdapter(Context context, @Nullable List<Customer> data) {
super(R.layout.item_customer, data);
this.parser = SmileyParser.getInstance(context);
}
@Override
protected void convert(BaseViewHolder helper, Customer item) {
if (!TextUtils.isEmpty(item.getName()))
helper.setText(R.id.tv_name, item.getName());
helper.setText(R.id.tv_state, "在线");
helper.setText(R.id.tv_last_msg, item.getLastMsg());
if (!TextUtils.isEmpty(item.getLastMsg()))
// helper.setText(R.id.tv_last_msg, item.getLastMsg());
helper.setText(R.id.tv_last_msg, parser.addSmileySpans(deleteHtml(item.getLastMsg()), true));
}
private static String deleteHtml(String msg) {
if (msg == null) {
return "";
}
msg = msg.replaceAll("\n", "\r\n");
return msg;
}
}
......@@ -71,10 +71,8 @@ public class ChatMessageServiceImp implements IChatMessageService {
}
@Override
public ChatMessage getLastMsg(ChatConversation conversation) {
if (conversation != null)
return dao.getLastMsgByUserId(conversation.getUserId());
return null;
public ChatMessage getLastMsg(String userId) {
return dao.getLastMsgByUserId(userId);
}
@Override
......
......@@ -21,7 +21,7 @@ public interface IChatMessageService {
void setUpSuccess(String packId, String url);
ChatMessage getLastMsg(ChatConversation conversation) ;
ChatMessage getLastMsg(String userId) ;
int getUnReadMsg(String targetUserId);
......
......@@ -2,6 +2,7 @@ package com.rv.im.db.table;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import com.rv.im.enums.MessageTypeEnum;
@DatabaseTable(tableName = "tb_customer")
public class Customer {
......@@ -85,4 +86,22 @@ public class Customer {
public void setLastMsgTimes(long lastMsgTimes) {
this.lastMsgTimes = lastMsgTimes;
}
public void setLastMessageInfo(ChatMessage lastMessageInfo) {
if (lastMessageInfo.getMessageType() == MessageTypeEnum.TEXT.getType()) {
setLastMsg(lastMessageInfo.getContent());
} else if (lastMessageInfo.getMessageType() == MessageTypeEnum.PIC.getType()) {
setLastMsg("[图片]");
} else if (lastMessageInfo.getMessageType() == MessageTypeEnum.FILE.getType()) {
setLastMsg("[文件]");
} else if (lastMessageInfo.getMessageType() == MessageTypeEnum.VOICE.getType()) {
setLastMsg("[语音]");
} else if (lastMessageInfo.getMessageType() == MessageTypeEnum.VOLTE_CALL.getType()) {
setLastMsg("[语音通话]");
} else if (lastMessageInfo.getMessageType() == MessageTypeEnum.VIDEO_CALL.getType()) {
setLastMsg("[视频]");
}
setLastMsgTimes(lastMessageInfo.getTimeSend());
}
}
......@@ -168,6 +168,11 @@ public class DateUtils {
return sdf.format(new Date(time));
}
public static String timestampToString6(long time) {
return sdf6.format(new Date(time));
}
/**
* 将时间戳转换成yyyy-MM-dd HH:mm字符串
*
......@@ -228,9 +233,9 @@ public class DateUtils {
* @return 失败返回-1 ,所以尽量是datetime1大于datetime2
*/
public static long compareDateSecond2(String datetime1, String datetime2) {
String date1=formatDate7(datetime1);
String date2=formatDate7(datetime2);
return compareDateSecond(date1,date2);
String date1 = formatDate7(datetime1);
String date2 = formatDate7(datetime2);
return compareDateSecond(date1, date2);
}
/**
......@@ -417,6 +422,7 @@ public class DateUtils {
/**
* yyyy-MM 转化成 yyyy年MM月
*
* @param dateStr yyyy-MM
* @return yyyy年MM月
*/
......@@ -562,7 +568,7 @@ public class DateUtils {
String day = "";
try {
long time = sdf12.parse(dateStr).getTime();
time +=30*60*1000;
time += 30 * 60 * 1000;
Date da = new Date(time);
day = sdf12.format(da);
} catch (Exception e) {
......@@ -576,7 +582,7 @@ public class DateUtils {
* 把时分转成毫秒
*/
public static long formatDate20(String dateStr) {
long time =0;
long time = 0;
try {
time = sdf12.parse(dateStr).getTime();
} catch (Exception e) {
......@@ -758,7 +764,6 @@ public class DateUtils {
}
/**
* 获取网络时间
*
......@@ -786,18 +791,123 @@ public class DateUtils {
/**
* 获取手机当前时间yyMMddHHmmss
*
* @return
*/
public static String getPhoneCurTime(){
String timeStr="";
public static String getPhoneCurTime() {
String timeStr = "";
try {
Date date=new Date(System.currentTimeMillis());
timeStr=sdf3.format(date);
Date date = new Date(System.currentTimeMillis());
timeStr = sdf3.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return timeStr;
}
/**
* @param inputJudgeDate 要判断是否在当天24h内的时间
* @return boolean
* @Description 是否为当天24h内
* @author 刘鹏博
*/
public static boolean isToday(Date inputJudgeDate) {
boolean flag = false;
//获取当前系统时间
long longDate = System.currentTimeMillis();
Date nowDate = new Date(longDate);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = dateFormat.format(nowDate);
String subDate = format.substring(0, 10);
//定义每天的24h时间范围
String beginTime = subDate + " 00:00:00";
String endTime = subDate + " 23:59:59";
Date paseBeginTime = null;
Date paseEndTime = null;
try {
paseBeginTime = dateFormat.parse(beginTime);
paseEndTime = dateFormat.parse(endTime);
} catch (ParseException e) {
}
if (inputJudgeDate.after(paseBeginTime) && inputJudgeDate.before(paseEndTime)) {
flag = true;
}
return flag;
}
/********
* 是否昨天
* @param timestamp
* @return
*/
public static boolean isYesterday(long timestamp) {
Calendar c = Calendar.getInstance();
clearCalendar(c, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND);
c.add(Calendar.DAY_OF_MONTH, -1);
long firstOfDay = c.getTimeInMillis(); // 昨天最早时间
c.setTimeInMillis(timestamp);
clearCalendar(c, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND); // 指定时间戳当天最早时间
return firstOfDay == c.getTimeInMillis();
}
private static void clearCalendar(Calendar c, int... fields) {
for (int f : fields) {
c.set(f, 0);
}
}
/********
* 是否昨天
* @param date
* @return
*/
public static boolean isThisWeek(Date date) {
return false;
}
/********
* 是否昨天
* @param date
* @return
*/
public static boolean isThisYear(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
Calendar c1 = Calendar.getInstance();
c1.setTime(new Date(System.currentTimeMillis()));
return c.get(Calendar.YEAR) == c1.get(Calendar.YEAR);
}
public static String getTodayTime(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
StringBuilder builder = new StringBuilder();
builder.append(hour >= 12 ? "下午" : "上午");
builder.append(hour >= 12 ? (hour - 12) : hour);
builder.append(":");
builder.append((minute > 10 ? minute : "0" + minute));
return builder.toString();
}
public static String getYesterdayTime(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
StringBuilder builder = new StringBuilder();
builder.append("昨天");
builder.append(hour);
builder.append(":");
builder.append((minute > 10 ? minute : "0" + minute));
return builder.toString();
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="3dp" />
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dp20" />
<solid android:color="@color/white" />
<stroke
android:width="0.1dp"
android:color="@color/Grey_500" />
<solid android:color="#fff2f2f2" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="3dp" />
<solid android:color="@color/Grey_200" />
<corners android:radius="@dimen/size_30" />
<stroke
android:width="0.1dp"
android:color="@color/Grey_500" />
<solid android:color="#fff2eeee" />
</shape>
\ No newline at end of file
......@@ -20,18 +20,15 @@
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center_vertical"
android:background="#F3F3F3"
android:padding="3dp">
android:layout_height="@dimen/size_60"
android:background="#ffffff">
<FrameLayout
android:id="@+id/right_layout"
android:layout_width="40dp"
android:layout_height="30dp"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_marginLeft="10dp"
android:gravity="center_vertical"
android:orientation="horizontal">
......@@ -39,15 +36,15 @@
android:id="@+id/voice_img_btn"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/im_voice"
android:background="@drawable/icon_voice"
android:contentDescription="@string/app_name"
android:padding="3dp" />
<ImageButton
android:id="@+id/btnCancelReplay"
android:id="@+id/ib_keyword"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/ic_chat_menu"
android:background="@drawable/icon_keyword"
android:contentDescription="@string/app_name"
android:padding="3dp"
android:visibility="gone" />
......@@ -67,24 +64,27 @@
<EditText
android:id="@+id/chat_edit"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_height="@dimen/size_40"
android:layout_gravity="center_vertical"
android:background="@drawable/im_input_button"
android:background="@drawable/im_voice_button_normal2"
android:inputType="textMultiLine"
android:maxLines="3"
android:padding="6dp"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:textSize="@dimen/one_level_title" />
<Button
<TextView
android:id="@+id/record_btn"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_height="@dimen/size_40"
android:layout_gravity="center_vertical"
android:background="@drawable/im_voice_button_normal2"
android:gravity="center"
android:text="@string/motalk_voice_chat_tip_1"
android:textColor="@color/black_trans_99"
android:textSize="@dimen/sp_16_text_size"
android:textColor="@color/light_grey"
android:textSize="@dimen/sp_14"
android:visibility="gone" />
</FrameLayout>
......@@ -100,29 +100,30 @@
<ImageButton
android:id="@+id/emotion_btn"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_width="@dimen/size_30"
android:layout_height="@dimen/size_30"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/im_btn_emotion_bg"
android:background="@drawable/emoje"
android:contentDescription="@string/app_name" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_10">
<ImageButton
android:id="@+id/more_btn"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginRight="5dp"
android:background="@drawable/im_btn_more_bg"
android:id="@+id/ib_photo"
android:layout_width="@dimen/size_30"
android:layout_height="27dp"
android:background="@drawable/icon_photo"
android:contentDescription="@string/app_name" />
<Button
android:id="@+id/send_btn"
android:layout_width="40dp"
android:layout_height="30dp"
android:layout_width="@dimen/dp40"
android:layout_height="@dimen/size_30"
android:layout_gravity="center_vertical"
android:background="@drawable/a_bg_for_send_msg"
android:gravity="center"
......@@ -149,7 +150,6 @@
android:id="@+id/chat_face_view_stub"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inflatedId="@+id/chat_face_view"
android:layout="@layout/chat_bottom_face" />
<ViewStub
......
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<VideoView
android:id="@+id/video_preview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/image_photo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
android:visibility="invisible" />
</FrameLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:orientation="horizontal">
<ImageView
android:id="@+id/image_flash"
android:layout_width="50dp"
android:layout_height="50dp"
android:padding="10dp"
android:src="@drawable/ic_flash_on" />
<ImageView
android:id="@+id/image_switch"
android:layout_width="50dp"
android:layout_height="50dp"
android:padding="10dp"
android:src="@drawable/ic_camera" />
</LinearLayout>
<com.cjt2325.cameralibrary.CaptureLayout
android:id="@+id/capture_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
<com.cjt2325.cameralibrary.FoucsView
android:id="@+id/fouce_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="invisible" />
</FrameLayout>
\ No newline at end of file
......@@ -34,19 +34,21 @@
<TextView
android:gravity="left|center_vertical"
android:textColor="@color/black"
android:id="@+id/chat_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginLeft="@dimen/dp5"
android:layout_marginTop="@dimen/chat_head_top"
android:background="@drawable/chat_to_warp_bg"
android:background="@drawable/shape_from_chat_msg"
android:clickable="true"
android:focusable="true"
android:maxWidth="210dp"
android:minHeight="30dp"
android:textSize="13sp"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:textColor="@color/colorMain"
android:textSize="@dimen/sp_14"
tools:text="sdfsdfsdfs" />
<ImageView
......
......@@ -72,13 +72,16 @@
android:layout_centerInParent="true"
android:layout_marginLeft="@dimen/dp5"
android:layout_marginTop="@dimen/chat_head_top"
android:background="@drawable/chat_from_warp_bg"
android:background="@drawable/shape_to_chat_msg"
android:clickable="true"
android:focusable="true"
android:gravity="right|center_vertical"
android:maxWidth="210dp"
android:minHeight="@dimen/chat_head_size"
android:textSize="13sp"
android:minHeight="@dimen/size_30"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:textColor="@color/colorMain"
android:textSize="@dimen/sp_14"
tools:text="sdfsdfsdfs" />
<com.rv.im.view.RoundImageView
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:id="@+id/dialog_select_video_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<TextView
android:id="@+id/dialog_select_video"
android:layout_width="wrap_content"
android:layout_height="52dp"
android:drawablePadding="8dp"
android:gravity="center"
android:textColor="@color/dialog_normal"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/Grey_400"/>
<LinearLayout
android:id="@+id/dialog_select_voice_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<TextView
android:id="@+id/dialog_select_voice"
android:layout_width="wrap_content"
android:layout_height="52dp"
android:drawablePadding="8dp"
android:gravity="center"
android:textColor="@color/dialog_normal"/>
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/dialog_select_cancel"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginTop="@dimen/dialog_bottom_cancel_margin"
android:background="@color/white"
android:gravity="center"
android:text="@string/cancel"
android:textColor="@color/dialog_normal"
android:textStyle="bold"/>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/size_55"
android:layout_height="@dimen/size_60"
android:background="@color/white"
android:gravity="center_vertical"
android:orientation="vertical">
<include layout="@layout/common_line" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
......@@ -22,8 +20,8 @@
android:background="@drawable/bg_circle_yellow">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="26dp"
android:layout_height="26dp"
android:layout_centerInParent="true"
android:src="@drawable/icon_logo_white" />
......@@ -31,9 +29,10 @@
<LinearLayout
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_10"
android:layout_weight="1"
android:gravity="left|center_vertical"
android:orientation="vertical">
......@@ -42,7 +41,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="牧之"
android:textSize="@dimen/sp_14" />
android:textColor="@color/black"
android:textSize="@dimen/sp_16" />
<TextView
android:id="@+id/tv_last_msg"
......@@ -50,22 +50,34 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/size_3"
android:ellipsize="end"
android:maxLength="10"
android:text="感谢您" />
android:focusable="true"
android:maxLength="30"
android:singleLine="true"
android:textColor="@color/gray"
android:textSize="@dimen/text_12" />
</LinearLayout>
<TextView
android:id="@+id/tv_state"
android:layout_width="0dp"
android:layout_width="@dimen/size_50"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:layout_weight="1"
android:gravity="right|top"
android:text="在线"
android:textColor="@color/gray"
android:textSize="@dimen/text_12" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10">
<include layout="@layout/common_line" />
</LinearLayout>
</LinearLayout>
......@@ -38,7 +38,7 @@ public class EasyCameraActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_easy_camera);
setContentView(R.layout.activity_easy_camera_lf);
// 全屏显示
if (Build.VERSION.SDK_INT >= 19) {
......@@ -60,7 +60,7 @@ public class EasyCameraActivity extends Activity {
}
private void initView() {
jCameraView = findViewById(R.id.jcameraview);
jCameraView = findViewById(R.id.imdescovery_jcameraview);
// 设置只能录像或只能拍照或两种都可以(默认两种都可以)
jCameraView.setFeatures(JCameraView.BUTTON_STATE_ONLY_CAPTURE);
......
......@@ -151,7 +151,7 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
setFlashRes();
}
});
mCaptureLayout = (CaptureLayout) view.findViewById(R.id.capture_layout);
mCaptureLayout = view.findViewById(R.id.capture_layout);
mCaptureLayout.setDuration(duration);
mCaptureLayout.setIconSrc(iconLeft, iconRight);
mFoucsView = (FoucsView) view.findViewById(R.id.fouce_view);
......
......@@ -13,7 +13,7 @@
iconRight 右边按钮图片资源(1.1.9+)
duration_max 设置最长录像时间(毫秒)-->
<com.xxfc.imcamera.cameralibrary.JCameraView
android:id="@+id/jcameraview"
android:id="@+id/imdescovery_jcameraview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment