This commit is contained in:
18401019693
2022-07-23 16:31:33 +08:00
parent 18aabb85a7
commit cc35227b56
26 changed files with 603 additions and 113 deletions

View File

@@ -76,21 +76,20 @@
<activity
android:name=".activity.LiveRyAnchorActivity"
android:screenOrientation="portrait" />
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
<activity
android:name=".activity.PDLiveConversationActivity"
android:hardwareAccelerated="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden">
</activity>
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"/>
<activity
android:name=".activity.PDLIiveChatActivity"
android:screenOrientation="portrait"
android:theme="@style/DialogActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
</activity>
android:theme="@style/DialogActivity"/>
<activity
android:name=".activity.EditNameRemarksActivity"
android:screenOrientation="portrait" />

View File

@@ -23,9 +23,12 @@ import com.yunbao.common.activity.SelectImageActivity;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.ImageEntity;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.imrongcloud.MessageIMManager;
import com.yunbao.live.R;
import com.yunbao.live.bean.SearchUserBean;
import com.yunbao.live.dialog.MenuPopuwWindow;
import com.yunbao.live.event.InputPanelViewHolderEvent;
import com.yunbao.live.utils.WindowSoftModeAdjustResizeExecutor;
import com.yunbao.live.views.InputPanelViewHolder;
import com.yunbao.live.views.PDLiveConversationFragment;
@@ -65,9 +68,12 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl
super.main();
EventBus.getDefault().register(this);
mContext = this;
// getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
initView();
initData();
WindowSoftModeAdjustResizeExecutor.assistActivity(this);
//设置会话界面操作监听器
MessageIMManager.get(this).addConversationClickListener();
}
/**
@@ -79,20 +85,26 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl
inputPanel.setTargetId(targetId);
//获取用户信息
UserInfo userInfo = RongUserInfoManager.getInstance().getUserInfo(targetId);
titleView.setText(userInfo.getName());
if (!TextUtils.isEmpty(userInfo.getExtra())) {
SearchUserBean userBean = GsonUtils.fromJson(userInfo.getExtra(), SearchUserBean.class);
//新手指导员
if (!TextUtils.isEmpty(userBean.getIs_admin()) && TextUtils.equals(userBean.getIs_admin(), "1")) {
isAdmin = true;
imgMore.setVisibility(View.GONE);
} else {//非指导员
isAdmin = false;
imgMore.setVisibility(View.VISIBLE);
if (null!=userInfo){
titleView.setText(userInfo.getName());
if (!TextUtils.isEmpty(userInfo.getExtra())) {
SearchUserBean userBean = GsonUtils.fromJson(userInfo.getExtra(), SearchUserBean.class);
//新手指导员
if (!TextUtils.isEmpty(userBean.getIs_admin()) && TextUtils.equals(userBean.getIs_admin(), "1")) {
isAdmin = true;
imgMore.setVisibility(View.GONE);
} else {//非指导员
isAdmin = false;
imgMore.setVisibility(View.VISIBLE);
}
Log.e("PDLiveConversation", userInfo.getExtra());
}
Log.e("PDLiveConversation", userInfo.getExtra());
}else {
titleView.setText("系統消息");
inputPanel.setVisibility(View.GONE);
}
}
/**
@@ -204,4 +216,13 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl
titleView.setText(event);
}
}
//消息中心
@Subscribe(threadMode = ThreadMode.MAIN)
public void onInputPanelViewHolderEvent(InputPanelViewHolderEvent event) {
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
inputPanel.hidePluginList();
}
}

View File

@@ -1,11 +1,8 @@
package com.yunbao.live.bean;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import com.alibaba.fastjson.annotation.JSONField;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.bean.BaseModel;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -15,7 +12,8 @@ import java.util.Date;
* IM 聊天用户 实体类
*/
public class ImUserBean {
public class ImUserBean extends BaseModel {
String title;//
String image;//头像
@@ -28,100 +26,121 @@ public class ImUserBean {
String remarks;//备注的信息
String is_admin;
String isDelet;
public String getIsDelet() {
return isDelet;
}
public void setIsDelet(String isDelet) {
this.isDelet = isDelet;
}
public String getIs_admin() {
return is_admin;
}
public void setIs_admin(String is_admin) {
this.is_admin = is_admin;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
String _method_ = "";//融雲消息類型
public String getTitle() {
return title;
}
public void setTitle(String title) {
public ImUserBean setTitle(String title) {
this.title = title;
return this;
}
public String getImage() {
return image;
}
public void setImage(String image) {
public ImUserBean setImage(String image) {
this.image = image;
return this;
}
public String getContent() {
return content;
}
public void setContent(String content) {
public ImUserBean setContent(String content) {
this.content = content;
return this;
}
public String getAddtime() {
return addtime;
}
public void setAddtime(String addtime) {
public ImUserBean setAddtime(String addtime) {
this.addtime = addtime;
return this;
}
public String getNum() {
return num;
}
public void setNum(String num) {
public ImUserBean setNum(String num) {
this.num = num;
return this;
}
public String getLink() {
return link;
}
public void setLink(String link) {
public ImUserBean setLink(String link) {
this.link = link;
return this;
}
public String getType() {
return type;
}
public void setType(String type) {
public ImUserBean setType(String type) {
this.type = type;
return this;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
public ImUserBean setUserId(String userId) {
this.userId = userId;
return this;
}
public String getRemarks() {
return remarks;
}
public ImUserBean setRemarks(String remarks) {
this.remarks = remarks;
return this;
}
public String getIs_admin() {
return is_admin;
}
public ImUserBean setIs_admin(String is_admin) {
this.is_admin = is_admin;
return this;
}
public String getIsDelet() {
return isDelet;
}
public ImUserBean setIsDelet(String isDelet) {
this.isDelet = isDelet;
return this;
}
public String get_method_() {
return _method_;
}
public ImUserBean set_method_(String _method_) {
this._method_ = _method_;
return this;
}
/**
* 会话列表展示时间
*/
public String getLastDate() {
if (!TextUtils.isEmpty(addtime)&&!TextUtils.equals(addtime,"0")) {
if (!TextUtils.isEmpty(addtime) && !TextUtils.equals(addtime, "0")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date currenTimeZone;
if (TextUtils.equals(type, "-1")) {
@@ -135,4 +154,18 @@ public class ImUserBean {
}
}
public String addNumber(int index) {
String number;
if (TextUtils.isEmpty(num)) {
number = String.valueOf(index);
} else {
try {
number = String.valueOf(Integer.parseInt(num) + index);
} catch (NumberFormatException e) {
number = String.valueOf(index);
}
}
return number;
}
}

View File

@@ -0,0 +1,26 @@
package com.yunbao.live.dialog;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.PopupWindow;
import com.yunbao.live.R;
/**
* 消息長按彈窗
*/
public class MessageLongClickPopuwindow {
private Activity mContext;
private View popupView;
private PopupWindow popupWindow;
public MessageLongClickPopuwindow(Activity context) {
this.mContext = context;
popupView = LayoutInflater.from(mContext).inflate(R.layout.view_message_long_click, null);
initView();
}
private void initView() {
}
}

View File

@@ -1,11 +1,15 @@
package com.yunbao.live.dialog;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import com.yunbao.live.R;
import com.yunbao.live.event.InputPanelViewHolderEvent;
import org.greenrobot.eventbus.EventBus;
import io.rong.imkit.conversation.MessageListAdapter;
import io.rong.imkit.model.UiMessage;
@@ -28,15 +32,22 @@ public class PDLiveMessageListAdapter extends MessageListAdapter {
Message.SentStatus sentStatus = mDataList.get(position).getMessage().getSentStatus();
ImageView readReceipt = holder.getConvertView().findViewById(R.id.rc_read_receipt);
ImageView readReceiptNew = holder.getConvertView().findViewById(R.id.rc_read_receipt_new);
if (readReceipt!=null&&readReceiptNew!=null){
if (readReceipt != null && readReceiptNew != null) {
if (readReceipt.getVisibility() == View.VISIBLE) {
readReceipt.setVisibility(View.GONE);
readReceiptNew.setBackgroundResource(R.mipmap.icon_message_read);
} else {
if (messageDirection.equals(Message.MessageDirection.SEND)&&sentStatus.equals(Message.SentStatus.SENT))
if (messageDirection.equals(Message.MessageDirection.SEND) && sentStatus.equals(Message.SentStatus.SENT))
readReceiptNew.setBackgroundResource(R.mipmap.icon_message_unread);
}
}
holder.getConvertView().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//消費掉軟件盤和插件頁面
EventBus.getDefault().post(new InputPanelViewHolderEvent());
return true;
}
});
}
}

View File

@@ -0,0 +1,9 @@
package com.yunbao.live.event;
import com.yunbao.common.bean.BaseModel;
/**
* 點擊聊天列表的消費
*/
public class InputPanelViewHolderEvent extends BaseModel {
}

View File

@@ -0,0 +1,48 @@
package com.yunbao.live.utils;
import android.app.Activity;
import android.graphics.Rect;
import android.os.Build;
import android.view.View;
import android.widget.FrameLayout;
public class WindowSoftModeAdjustResizeExecutor {
// For more information, see https://code.google.com/p/android/issues/detail?id=5497
// To use this class, simply invoke assistActivity() on an Activity that already has its content view set.
// CREDIT TO Joseph Johnson (http://stackoverflow.com/users/341631/joseph-johnson) for publishing the original Android solution on stackoverflow.com
public static void assistActivity(Activity activity) {
new WindowSoftModeAdjustResizeExecutor(activity);
}
private View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
private WindowSoftModeAdjustResizeExecutor(Activity activity) {
FrameLayout content = activity.findViewById(android.R.id.content);
mChildOfContent = content.getChildAt(0);
mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(() -> WindowSoftModeAdjustResizeExecutor.this.possiblyResizeChildOfContent());
frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
}
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
mChildOfContent.requestLayout();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight() {
Rect r = new Rect();
mChildOfContent.getWindowVisibleDisplayFrame(r);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
return (r.bottom - r.top);
}
return r.bottom;
}
}

View File

@@ -78,21 +78,23 @@ public class InputPanelViewHolder extends LinearLayout implements View.OnClickLi
inputPanelView.findViewById(R.id.lt_photo_button).setOnClickListener(this);
inputPanelView.findViewById(R.id.lt_choospic_button).setOnClickListener(this);
inputPanelView.findViewById(R.id.lt_video_button).setOnClickListener(this);
editBtn.setOnFocusChangeListener(focusChangeListener);
// editBtn.setOnFocusChangeListener(focusChangeListener);
}
//输入框焦点监听事件
View.OnFocusChangeListener focusChangeListener = new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
//失去焦点
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editBtn, InputMethodManager.SHOW_FORCED);
imm.hideSoftInputFromWindow(editBtn.getWindowToken(), 0); //强制隐藏键盘
}
}
};
// //输入框焦点监听事件
// View.OnFocusChangeListener focusChangeListener = new OnFocusChangeListener() {
// @Override
// public void onFocusChange(View v, boolean hasFocus) {
// if (!hasFocus&& pluginList.getVisibility()==GONE) {
// //失去焦点
// InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
// imm.showSoftInput(editBtn, InputMethodManager.SHOW_FORCED);
// imm.hideSoftInputFromWindow(editBtn.getWindowToken(), 0); //强制隐藏键盘
// } else {
// pluginList.setVisibility(GONE);
// }
// }
// };
@Override
public void onClick(View v) {
@@ -106,6 +108,7 @@ public class InputPanelViewHolder extends LinearLayout implements View.OnClickLi
} else if (id == R.id.edit_btn) {
if (pluginList.getVisibility() == VISIBLE) {
pluginList.setVisibility(GONE);
editBtn.setFocusable(true);
}
} else if (id == R.id.lt_photo_button) {
if (messageCallback != null) {
@@ -129,11 +132,11 @@ public class InputPanelViewHolder extends LinearLayout implements View.OnClickLi
if (pluginList.getVisibility() == VISIBLE) {
pluginList.setVisibility(GONE);
} else {
pluginList.setVisibility(VISIBLE);
//失去焦点
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editBtn, InputMethodManager.SHOW_FORCED);
imm.hideSoftInputFromWindow(editBtn.getWindowToken(), 0); //强制隐藏键盘
pluginList.setVisibility(VISIBLE);
}
}
@@ -205,7 +208,7 @@ public class InputPanelViewHolder extends LinearLayout implements View.OnClickLi
};
/**
* 发送媒体消息
* 发送媒体消息 隱藏
*
* @param imagePath
*/
@@ -303,4 +306,11 @@ public class InputPanelViewHolder extends LinearLayout implements View.OnClickLi
messageCallback = callback;
}
/**
* 隱藏插件列表
*/
public void hidePluginList() {
pluginList.setVisibility(GONE);
}
}

View File

@@ -74,13 +74,14 @@
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
android:gravity="center_vertical"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"
app:layout_constraintTop_toBottomOf="@+id/rc_conversation_title">
<ImageView
android:id="@+id/rc_read_receipt_new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="30dp"
android:layout_height="15dp"
android:layout_gravity="bottom"
android:layout_marginStart="15dp"
android:layout_marginEnd="4dp" />

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:cardBackgroundColor="#474747"
app:cardCornerRadius="12dp"
app:cardElevation="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@mipmap/icon_message_copy"
android:drawablePadding="5dp"
android:text="@string/copy"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@mipmap/icon_message_copy"
android:drawablePadding="5dp"
android:text="@string/withdraw"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@mipmap/icon_message_quote"
android:drawablePadding="5dp"
android:text="@string/quote"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB