修复测试反馈问题

This commit is contained in:
zlzw 2023-10-27 17:53:28 +08:00
parent 4bd1e8eccc
commit 9d0f8cb060
43 changed files with 441 additions and 192 deletions

View File

@ -15,6 +15,74 @@ android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
packagingOptions {
pickFirst "lib/armeabi/libyuvutils.so"
pickFirst "lib/arm64-v8a/libyuvutils.so"
pickFirst "lib/armeabi-v7a/libyuvutils.so"
pickFirst "lib/armeabi/libyuvtools.so"
pickFirst "lib/arm64-v8a/libyuvtools.so"
pickFirst "lib/armeabi-v7a/libyuvtools.so"
exclude "lib/arm64-v8a/libmmcv_api_handgesture.so"
exclude "lib/arm64-v8a/libmmcv_api_express.so"
exclude "lib/arm64-v8a/libMediaEncoder.so"
exclude "lib/arm64-v8a/libarcore_sdk_c.so"
exclude "lib/arm64-v8a/libmediadecoder.so"
exclude "lib/arm64-v8a/libMediaMuxer.so"
exclude "lib/arm64-v8a/libarcore_sdk_jni.so"
exclude "lib/arm64-v8a/libMediaUtils.so"
exclude "lib/arm64-v8a/libcosmosffmpeg.so"
//so
exclude 'lib/arm64-v8a/libxeengine.so'
exclude 'lib/arm64-v8a/libmmcv_base.so'
exclude 'lib/arm64-v8a/libmmcrypto.so'
exclude 'lib/arm64-v8a/libMNN.so'
// exclude 'lib/arm64-v8a/libc++_shared.so'
exclude 'lib/arm64-v8a/libmmcv_api_base.so'
exclude 'lib/arm64-v8a/libmmcv_api_beauty.so'
exclude 'lib/arm64-v8a/libmmcv_api_bodylandmark.so'
exclude 'lib/arm64-v8a/libmmcv_api_express.so'
exclude 'lib/arm64-v8a/libmmcv_api_faceattributes.so'
exclude 'lib/arm64-v8a/libmmcv_api_facefeatures.so'
exclude 'lib/arm64-v8a/libmmcv_api_faceprocessor.so'
exclude 'lib/arm64-v8a/libmmcv_api_facerecognition.so'
exclude 'lib/arm64-v8a/libmmcv_api_handgesture.so'
exclude 'lib/arm64-v8a/libmmcv_api_imagequality.so'
exclude 'lib/arm64-v8a/libmmcv_api_objectdetect.so'
exclude 'lib/arm64-v8a/libmmcv_api_segmentation.so'
exclude 'lib/arm64-v8a/libmmcv_api_videoprocessor.so'
exclude 'lib/arm64-v8a/libmmlic.so'
exclude 'lib/arm64-v8a/libMNN_CL.so'
exclude 'lib/arm64-v8a/libMNN_Express.so'
exclude 'lib/armeabi-v7a/libxeengine.so'
exclude 'lib/armeabi-v7a/libmmcv_base.so'
exclude 'lib/armeabi-v7a/libmmcrypto.so'
exclude 'lib/armeabi-v7a/libMNN.so'
// exclude 'lib/armeabi-v7a/libc++_shared.so'
exclude 'lib/armeabi-v7a/libmmcv_api_base.so'
exclude 'lib/armeabi-v7a/libmmcv_api_beauty.so'
exclude 'lib/armeabi-v7a/libmmcv_api_bodylandmark.so'
exclude 'lib/armeabi-v7a/libmmcv_api_express.so'
exclude 'lib/armeabi-v7a/libmmcv_api_faceattributes.so'
exclude 'lib/armeabi-v7a/libmmcv_api_facefeatures.so'
exclude 'lib/armeabi-v7a/libmmcv_api_faceprocessor.so'
exclude 'lib/armeabi-v7a/libmmcv_api_facerecognition.so'
exclude 'lib/armeabi-v7a/libmmcv_api_handgesture.so'
exclude 'lib/armeabi-v7a/libmmcv_api_imagequality.so'
exclude 'lib/armeabi-v7a/libmmcv_api_objectdetect.so'
exclude 'lib/armeabi-v7a/libmmcv_api_segmentation.so'
exclude 'lib/armeabi-v7a/libmmcv_api_videoprocessor.so'
exclude 'lib/armeabi-v7a/libmmlic.so'
exclude 'lib/armeabi-v7a/libMNN_CL.so'
exclude 'lib/armeabi-v7a/libMNN_Express.so'
//
if (rootProject.ext.manifestPlaceholders.isPluginModel) {
exclude 'lib/armeabi-v7a/libCNamaSDK.so'
exclude 'lib/arm64-v8a/libCNamaSDK.so'
exclude 'lib/armeabi-v7a/libfuai.so'
exclude 'lib/arm64-v8a/libfuai.so'
}
}
defaultConfig {
applicationId "com.shayu.onetoonenew"

View File

@ -236,7 +236,7 @@
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.shayu.onetoone.fileprovider"
android:authorities="${packageName}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data

View File

@ -20,6 +20,7 @@ import com.shayu.onetoone.provider.MessageChatAutoItemProvider;
import com.shayu.onetoone.provider.MessageChatReceiveGiftItemProvider;
import com.shayu.onetoone.provider.MessageChatTipsItemProvider;
import com.shayu.onetoone.provider.OTOCallEndMessageItemProvider;
import com.shayu.onetoone.utils.ChatPluginExtensionConfig;
import com.shayu.onetoone.utils.NeverCrashUtils;
import com.yunbao.common.BuildConfig;
import com.yunbao.common.CommonAppContext;
@ -38,6 +39,8 @@ import java.util.ArrayList;
import io.rong.callkit.CallEndMessageItemProvider;
import io.rong.imkit.RongIM;
import io.rong.imkit.config.RongConfigCenter;
import io.rong.imkit.conversation.extension.RongExtension;
import io.rong.imkit.conversation.extension.RongExtensionManager;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.provider.PrivateConversationProvider;
import io.rong.imkit.utils.RouteUtils;
@ -124,6 +127,7 @@ public class AppContext extends CommonAppContext {
RongConfigCenter.conversationConfig().replaceMessageProvider(CallEndMessageItemProvider.class,new OTOCallEndMessageItemProvider());
RongExtensionManager.getInstance().setExtensionConfig(new ChatPluginExtensionConfig());
}

View File

@ -1,6 +1,5 @@
package com.shayu.onetoone.activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
@ -20,30 +19,23 @@ import com.shayu.onetoone.activity.fragments.DynamicFragment;
import com.shayu.onetoone.activity.fragments.FriendsFragment;
import com.shayu.onetoone.activity.fragments.MessageFragment;
import com.shayu.onetoone.activity.fragments.MyFragment;
import com.shayu.onetoone.activity.fragments.message.MsgMessageFragment;
import com.shayu.onetoone.activity.message.ChatActivity;
import com.shayu.onetoone.bean.JoinAnchorBean;
import com.shayu.onetoone.bean.MatchingItemSizeBean;
import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.bean.SendConsumeBean;
import com.shayu.onetoone.dialog.FirstTipsDialog;
import com.shayu.onetoone.dialog.TipsDialog;
import com.shayu.onetoone.event.HomeBusEvent;
import com.shayu.onetoone.event.MessageMsgBusEvent;
import com.shayu.onetoone.listener.OnDialogClickListener;
import com.shayu.onetoone.listener.OnSendMessageListener;
import com.shayu.onetoone.manager.CallClientManager;
import com.shayu.onetoone.manager.OTONetManager;
import com.shayu.onetoone.manager.RouteManager;
import com.shayu.onetoone.manager.SendMessageManager;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.interfaces.OnItemClickListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.NoviceInstructorManager;
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import org.greenrobot.eventbus.Subscribe;
@ -52,12 +44,9 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import io.rong.imkit.RongIM;
import io.rong.imkit.manager.UnReadMessageManager;
import io.rong.imkit.userinfo.RongUserInfoManager;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.UserInfo;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.functions.Function4;
@ -173,10 +162,10 @@ public class MainActivity extends AbsOTOActivity {
RouteManager.forwardActivity(RouteManager.ACTIVITY_MATCHING);
}
});
OTONetManager.getInstance(mContext).setFiled("is_login","1",null);
OTONetManager.getInstance(mContext).setFiled("is_login", "1", null);
} else {
viewPager.setCurrentItem(2);
OTONetManager.getInstance(mContext).setFiled("is_chat","1",null);
OTONetManager.getInstance(mContext).setFiled("is_chat", "1", null);
}
dialog.dismiss();
}
@ -197,6 +186,7 @@ public class MainActivity extends AbsOTOActivity {
super.onResume();
checkUserInfoIsSet();
initFirstLoginTips();
ToastUtil.showDebug("2");
}
/**
@ -219,35 +209,21 @@ public class MainActivity extends AbsOTOActivity {
}
private void showRedPoint(int count) {
OTONetManager.getInstance(mContext).getMessageSystemLists(new HttpCallback<List<OfficialNoticeBean>>() {
int point = 0;
//大于0则是通过会话未读监听器获取到的数则不用再调用获取未读数接口了
if (count >= 0) {
updateUnreadCount(MsgMessageFragment.systemPoint + count);
Bus.get().post(new MessageMsgBusEvent(MessageMsgBusEvent.TYPE_UPDATE_POINT, MsgMessageFragment.systemPoint + count));
return;
}
RongIMClient.getInstance().getTotalUnreadCount(new RongIMClient.ResultCallback<Integer>() {
@Override
public void onSuccess(List<OfficialNoticeBean> data) {
for (OfficialNoticeBean datum : data) {
point += datum.getNum();
}
Bus.get().post(new MessageMsgBusEvent(MessageMsgBusEvent.TYPE_UPDATE_SYSTEM, point + count));
//大于0则是通过会话未读监听器获取到的数则不用再调用获取未读数接口了
if (count >= 0) {
updateUnreadCount(point + count);
return;
}
RongIMClient.getInstance().getTotalUnreadCount(new RongIMClient.ResultCallback<Integer>() {
@Override
public void onSuccess(Integer integer) {
updateUnreadCount(point + integer);
}
@Override
public void onError(RongIMClient.ErrorCode e) {
}
});
public void onSuccess(Integer integer) {
updateUnreadCount(MsgMessageFragment.systemPoint + integer);
Bus.get().post(new MessageMsgBusEvent(MessageMsgBusEvent.TYPE_UPDATE_POINT, MsgMessageFragment.systemPoint + integer));
}
@Override
public void onError(String error) {
public void onError(RongIMClient.ErrorCode e) {
}
});
@ -278,6 +254,10 @@ public class MainActivity extends AbsOTOActivity {
public void busEvent(MessageMsgBusEvent event) {
if (event.getType() == MessageMsgBusEvent.TYPE_ALL_READ) {
updateUnreadCount(0);
} else if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_POINT) {
if (event.getNum() == -1) {
showRedPoint(-1);
}
}
}
}

View File

@ -190,6 +190,7 @@ public class HomeRankFragment extends BaseFragment {
void setData(HomeRankBean user, int position) {
getItem(position,mItem1,mItem2,mItem3).setVisibility(View.VISIBLE);
getItem(position,diamond1,diamond2,diamond3).setVisibility(View.VISIBLE);
getItem(position, mName1, mName2, mName3).setText(user.getUserNicename());
getItem(position, mVotes1, mVotes2, mVotes3).setText(user.getMoney());
if (user.isFollow()) {

View File

@ -7,6 +7,7 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
@ -19,6 +20,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.FileProvider;
import com.lxj.xpopup.XPopup;
import com.makeramen.roundedimageview.RoundedImageView;
@ -27,9 +29,7 @@ import com.shayu.onetoone.adapter.MsgChatMessageListAdapter;
import com.shayu.onetoone.bean.FollowBean;
import com.shayu.onetoone.bean.GiftBean;
import com.shayu.onetoone.bean.MessageChatAuthContent;
import com.shayu.onetoone.bean.MessageChatTipsContent;
import com.shayu.onetoone.bean.MessageConsumeConfigBean;
import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.bean.SendConsumeBean;
import com.shayu.onetoone.bean.UserBean;
import com.shayu.onetoone.dialog.BottomListDialog;
@ -53,7 +53,6 @@ import com.yunbao.common.interfaces.OnItemClickListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.ProcessImageUtil;
import com.yunbao.common.utils.SpUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
@ -70,6 +69,8 @@ import java.util.List;
import io.rong.imkit.IMCenter;
import io.rong.imkit.config.RongConfigCenter;
import io.rong.imkit.conversation.MessageListAdapter;
import io.rong.imkit.conversation.extension.InputMode;
import io.rong.imkit.conversation.extension.RongExtensionViewModel;
import io.rong.imkit.model.UiMessage;
import io.rong.imkit.picture.PictureSelector;
import io.rong.imkit.picture.config.PictureMimeType;
@ -89,7 +90,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
View mInputPanel;
View numLayout;
EditText mEditText;
ImageView img, call, video, gift;
ImageView img, call, video, gift,mEmojiToggleBtn;
ProcessImageUtil cameraUtil;
String targetId;
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
@ -103,6 +104,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
ImageView status;
TextView num;
Button follow;
RongExtensionViewModel mExtensionViewModel;
private String token;
@ -126,7 +128,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
initBtn();
initChat();
initPriceBean();
cameraUtil = new ProcessImageUtil(getActivity(), "com.shayu.onetoone.fileprovider");
cameraUtil = new ProcessImageUtil(getActivity(), "${packageName}.fileprovider");
mRongExtension.setVisibility(View.VISIBLE);
// img.setOnClickListener(v -> cameraUtil.getImageByCamera());
@ -202,19 +204,25 @@ public class ChatMessageFragment extends AbsConversationFragment {
MsgInputPanelForAudio audio;
MsgInputPanelForGift giftPanel;
/**
* 反射拿融云的view
*/
private void initBtn() {
try {
Field field = mRongExtension.getInputPanel().getClass().getDeclaredField("mInputPanel");
field.setAccessible(true);
mInputPanel = (View) field.get(mRongExtension.getInputPanel());
assert mInputPanel != null;
field=mRongExtension.getInputPanel().getClass().getDeclaredField("mExtensionViewModel");
field.setAccessible(true);
mExtensionViewModel= (RongExtensionViewModel) field.get(mRongExtension.getInputPanel());
mSendBtn = mInputPanel.getRootView().findViewById(R.id.send_btn);
img = mInputPanel.getRootView().findViewById(R.id.input_panel_image_btn);
video = mInputPanel.getRootView().findViewById(R.id.input_panel_video_btn);
call = mInputPanel.getRootView().findViewById(R.id.input_panel_call_btn);
gift = mInputPanel.getRootView().findViewById(R.id.input_panel_gift_btn);
mEditText = mInputPanel.getRootView().findViewById(R.id.edit_btn);
mEmojiToggleBtn = mInputPanel.findViewById(R.id.input_panel_emoji_btn);
ImageView mVoiceToggleBtn = (ImageView) mInputPanel.getRootView().findViewById(R.id.input_panel_voice_toggle);
assert mVoiceToggleBtn != null;
audio = new MsgInputPanelForAudio(targetId, getActivity(), mRongExtension);
@ -230,12 +238,25 @@ public class ChatMessageFragment extends AbsConversationFragment {
}
});
mVoiceToggleBtn.setOnClickListener(view -> {
mExtensionViewModel.getInputModeLiveData().setValue(InputMode.TextInput);
giftPanel.hide();
audio.show();
});
gift.setOnClickListener(v -> {
mExtensionViewModel.getInputModeLiveData().setValue(InputMode.TextInput);
audio.hide();
giftPanel.show();
});
mEmojiToggleBtn.setOnClickListener(v -> {
if(mExtensionViewModel.getInputModeLiveData().getValue()==InputMode.TextInput){
audio.hide();
giftPanel.hide();
mExtensionViewModel.getInputModeLiveData().setValue(InputMode.EmoticonMode);
}else{
mExtensionViewModel.getInputModeLiveData().setValue(InputMode.TextInput);
}
});
video.setOnClickListener(v -> {
if (call.getTag() != null) {
@ -281,7 +302,9 @@ public class ChatMessageFragment extends AbsConversationFragment {
@Override
public void onError(int status, String msg) {
super.onError(status, msg);
sendAuthRequest();
if(status==1) {
sendAuthRequest();
}
}
});
});
@ -328,7 +351,9 @@ public class ChatMessageFragment extends AbsConversationFragment {
@Override
public void onError(int status, String msg) {
super.onError(status, msg);
sendAuthRequest();
if(status==1) {
sendAuthRequest();
}
}
});
});
@ -380,10 +405,10 @@ public class ChatMessageFragment extends AbsConversationFragment {
.getTargetUserInfo(Integer.parseInt(targetId), new HttpCallback<UserBean>() {
@Override
public void onSuccess(UserBean data) {
if (data.getInfo().getName_auth() == 1) {
listener.onError(0, "");
} else {
if (data.getInfo().getName_auth() == 2) {
listener.onSuccess("", null);
} else {
listener.onError(data.getInfo().getName_auth(), "");
}
}
@ -657,7 +682,14 @@ public class ChatMessageFragment extends AbsConversationFragment {
for (LocalMedia item : selectList) {
String mimeType = item.getMimeType();
if (mimeType.startsWith("image")) {
ImageMessage imageMessage = ImageMessage.obtain(Uri.parse(item.getPath()), sendOrigin);
Uri uri;
//判断安卓版本小于10
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
uri= FileProvider.getUriForFile(mContext,mContext.getPackageName()+".fileprovider",new File(item.getPath()));
}else{
uri=Uri.parse(item.getPath());
}
ImageMessage imageMessage = ImageMessage.obtain(uri, sendOrigin);
Message message = Message.obtain(targetId, conversationType, imageMessage);
message.setSenderUserId(CommonAppConfig.getInstance().getUid());
message.setObjectName("RC:ImgMsg");
@ -714,35 +746,20 @@ public class ChatMessageFragment extends AbsConversationFragment {
}
private void showRedPoint() {
OTONetManager.getInstance(mContext).getMessageSystemLists(new HttpCallback<List<OfficialNoticeBean>>() {
int point = 0;
RongIMClient.getInstance().getTotalUnreadCount(new RongIMClient.ResultCallback<Integer>() {
@Override
public void onSuccess(List<OfficialNoticeBean> data) {
for (OfficialNoticeBean datum : data) {
point += datum.getNum();
public void onSuccess(Integer integer) {
Integer tmp = integer + MsgMessageFragment.systemPoint;
if (tmp <= 0) {
numLayout.setVisibility(View.INVISIBLE);
return;
}
RongIMClient.getInstance().getTotalUnreadCount(new RongIMClient.ResultCallback<Integer>() {
@Override
public void onSuccess(Integer integer) {
Integer tmp = integer + point;
if (tmp <= 0) {
numLayout.setVisibility(View.INVISIBLE);
return;
}
numLayout.setVisibility(View.VISIBLE);
num.setText(tmp + "");
}
@Override
public void onError(RongIMClient.ErrorCode e) {
}
});
numLayout.setVisibility(View.VISIBLE);
num.setText(tmp + "");
}
@Override
public void onError(String error) {
public void onError(RongIMClient.ErrorCode e) {
}
});
@ -757,7 +774,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
@Subscribe
public void event(MessageMsgBusEvent event) {
if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_SYSTEM) {
if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_POINT) {
if (event.getNum() <= 0) {
numLayout.setVisibility(View.INVISIBLE);
return;

View File

@ -48,6 +48,13 @@ public class MessageInteractiveFragment extends AbsConversationFragment {
.getSystemMessageList(noticeBean.getType(), new HttpCallback<List<SystemMessageBean>>() {
@Override
public void onSuccess(List<SystemMessageBean> data) {
if(data.isEmpty()){
mList.setVisibility(View.GONE);
findViewById(R.id.view_empty).setVisibility(View.VISIBLE);
return;
}
mList.setVisibility(View.VISIBLE);
findViewById(R.id.view_empty).setVisibility(View.GONE);
List<UiMessage> list = new ArrayList<>();
for (SystemMessageBean item : data) {
SystemNoticeUiMessage message = new SystemNoticeUiMessage(new Message());

View File

@ -46,6 +46,13 @@ public class MessageNoticeFragment extends AbsConversationFragment {
.getSystemMessageList(noticeBean.getType(), new HttpCallback<List<SystemMessageBean>>() {
@Override
public void onSuccess(List<SystemMessageBean> data) {
if(data.isEmpty()){
mList.setVisibility(View.GONE);
findViewById(R.id.view_empty).setVisibility(View.VISIBLE);
return;
}
mList.setVisibility(View.VISIBLE);
findViewById(R.id.view_empty).setVisibility(View.GONE);
List<UiMessage> list = new ArrayList<>();
for (SystemMessageBean item : data) {
SystemNoticeUiMessage message = new SystemNoticeUiMessage(new Message());

View File

@ -1,7 +1,6 @@
package com.shayu.onetoone.activity.fragments.message;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.LayoutInflater;
@ -12,15 +11,12 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSONObject;
import com.shayu.onetoone.R;
import com.shayu.onetoone.activity.fragments.BaseFragment;
import com.shayu.onetoone.adapter.MsgMessageRecyclerViewAdapter;
import com.shayu.onetoone.bean.HomeItemBean;
import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.event.MessageMsgBusEvent;
import com.shayu.onetoone.manager.OTONetManager;
import com.yanzhenjie.recyclerview.OnItemClickListener;
import com.yanzhenjie.recyclerview.OnItemMenuClickListener;
import com.yanzhenjie.recyclerview.OnItemMenuStateListener;
import com.yanzhenjie.recyclerview.SwipeMenuBridge;
@ -31,7 +27,6 @@ import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.WordUtil;
import org.greenrobot.eventbus.Subscribe;
@ -55,8 +50,6 @@ import io.rong.imkit.widget.refresh.listener.OnRefreshListener;
import io.rong.imkit.widget.refresh.wrapper.RongRefreshHeader;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.UserInfo;
/**
* 消息-好友
@ -238,7 +231,7 @@ public class MsgFriendFragment extends BaseFragment implements BaseAdapter.OnIte
@Subscribe
public void event(MessageMsgBusEvent event) {
if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_SYSTEM) {
if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_POINT) {
page = 1;
initData();
}

View File

@ -1,7 +1,6 @@
package com.shayu.onetoone.activity.fragments.message;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
@ -24,19 +23,16 @@ import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.bean.TargetUserInfoBean;
import com.shayu.onetoone.event.MessageMsgBusEvent;
import com.shayu.onetoone.manager.OTONetManager;
import com.shayu.onetoone.manager.RouteManager;
import com.yanzhenjie.recyclerview.OnItemMenuClickListener;
import com.yanzhenjie.recyclerview.OnItemMenuStateListener;
import com.yanzhenjie.recyclerview.SwipeMenuBridge;
import com.yanzhenjie.recyclerview.SwipeMenuCreator;
import com.yanzhenjie.recyclerview.SwipeMenuItem;
import com.yanzhenjie.recyclerview.SwipeRecyclerView;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.RandomUtil;
import com.yunbao.common.utils.SpUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
@ -90,6 +86,7 @@ import io.rong.imlib.model.UserInfo;
* copy {@link io.rong.imkit.conversationlist.ConversationListFragment}
*/
public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnItemClickListener {
public static int systemPoint = 0;
private static final String TAG = MsgMessageFragment.class.getSimpleName();
SwipeRecyclerView mList;
SmartRefreshLayout mRefreshLayout;
@ -174,13 +171,13 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
private void initSystemNotice() {
systemPoint = 0;
OTONetManager.getInstance(mContext)
.getMessageSystemLists(new HttpCallback<List<OfficialNoticeBean>>() {
@Override
public void onSuccess(List<OfficialNoticeBean> data) {
for (OfficialNoticeBean datum : data) {
systemPoint += datum.getNum();
if (datum.getType() == 3) {
SpUtil.setStringValue("customerService", JSONObject.toJSONString(datum));
continue;
@ -196,6 +193,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
}
onConversationListRefresh(mRefreshLayout);
mAdapter.notifyDataSetChanged();
Bus.get().post(new MessageMsgBusEvent(MessageMsgBusEvent.TYPE_UPDATE_POINT, -1));
}
@Override
@ -209,7 +207,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
}
private SingleConversation setTopData(String title, String content, long time, String avatar, int num, int id, String exp) {
if(StringUtil.isEmpty(content)){
if (StringUtil.isEmpty(content)) {
content = "";
}
SingleConversation conversation = new SingleConversation(getContext(), new Conversation());
@ -241,7 +239,9 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
* 全部标记已读
*/
public void allRead() {
// clearTopData();
// clearTopData();
OTONetManager.getInstance(mContext)
.messageReadAll(null);
RongCoreClient.getInstance().getUnreadConversationList(new IRongCoreCallback.ResultCallback<List<Conversation>>() {
@Override
public void onSuccess(List<Conversation> conversations) {
@ -350,7 +350,9 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
public void onResume() {
super.onResume();
initSystemNotice();
if (this.mConversationListViewModel != null) {
mConversationListViewModel.getConversationList(false, true, 0L);
this.mConversationListViewModel.clearAllNotification();
}
@ -426,6 +428,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
protected void onConversationListRefresh(RefreshLayout refreshLayout) {
if (this.mConversationListViewModel != null) {
Bus.get().post(new MessageMsgBusEvent(MessageMsgBusEvent.TYPE_UPDATE_POINT, -1));
this.mConversationListViewModel.getConversationList(false, true, 0L);
}
}
@ -489,7 +492,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
Bundle bundle = new Bundle();
bundle.putInt("model", noticeBean.getType());
bundle.putString("data", JSONObject.toJSONString(noticeBean));
RouteUtils.routeToConversationActivity(getContext(), conversationIdentifier,bundle);
RouteUtils.routeToConversationActivity(getContext(), conversationIdentifier, bundle);
}
}

View File

@ -93,6 +93,13 @@ public class SystemMessageFragment extends AbsConversationFragment {
.getSystemMessageList(SystemMessageBean.TYPE_SYSTEM, new HttpCallback<List<SystemMessageBean>>() {
@Override
public void onSuccess(List<SystemMessageBean> data) {
if(data.isEmpty()){
mList.setVisibility(View.GONE);
findViewById(R.id.view_empty).setVisibility(View.VISIBLE);
return;
}
mList.setVisibility(View.VISIBLE);
findViewById(R.id.view_empty).setVisibility(View.GONE);
for (SystemMessageBean item : data) {
sendMessage(item);
}

View File

@ -87,7 +87,7 @@ public class CompleteActivity extends AbsOTOActivity {
}
private void initCamera() {
cameraUtil = new ProcessImageUtil(this, "com.shayu.onetoone.fileprovider");
cameraUtil = new ProcessImageUtil(this, "${packageName}.fileprovider");
cameraUtil.setImageResultCallback(new ImageResultCallback() {
@Override
public void beforeCamera() {

View File

@ -18,51 +18,29 @@ import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.DeviceUtils;
import com.blankj.utilcode.util.GsonUtils;
import com.fm.openinstall.OpenInstall;
import com.fm.openinstall.listener.AppInstallAdapter;
import com.fm.openinstall.model.AppData;
import com.lzy.okgo.model.Response;
import com.shayu.onetoone.R;
import com.shayu.onetoone.activity.AbsOTOActivity;
import com.shayu.onetoone.activity.MainActivity;
import com.shayu.onetoone.bean.JoinAnchorBean;
import com.shayu.onetoone.manager.OTONetManager;
import com.shayu.onetoone.manager.RouteManager;
import com.shayu.onetoone.utils.MainHttpUtil;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.Constants;
import com.yunbao.common.HtmlConfig;
import com.yunbao.common.activity.AbsActivity;
import com.yunbao.common.activity.WebViewActivity;
import com.yunbao.common.bean.ConfigBean;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.common.bean.UserAreaBean;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.fragment.LoadingDialog;
import com.yunbao.common.http.CommonHttpConsts;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.http.HttpClient;
import com.yunbao.common.http.JsonBean;
import com.yunbao.common.http.LiveHttpUtil;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.NoviceInstructorManager;
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
import com.yunbao.common.utils.LiveRoomCheckLivePresenter;
import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
@ -160,7 +138,7 @@ public class LoginActivity extends AbsOTOActivity {
public void onTextChanged(CharSequence s, int start, int before, int count) {
String phone = mEditPhone.getText().toString();
String pwd = mEditPwd.getText().toString();
mBtnLogin.setEnabled(!TextUtils.isEmpty(phone) && !TextUtils.isEmpty(pwd));
// mBtnLogin.setEnabled(!TextUtils.isEmpty(phone) && !TextUtils.isEmpty(pwd));
}
@Override
@ -373,6 +351,6 @@ public class LoginActivity extends AbsOTOActivity {
@Override
public void onBackPressed() {
super.onBackPressed();
RouteUtil.forwardEntry2();
RouteManager.forwardEntryActivity();
}
}

View File

@ -104,6 +104,10 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis
CallClientManager.getManager().removeOnVoIPCallListener(onCallStatusListener);
}
@Override
public void onBackPressed() {
}
private void initView() {
// 获取全局变量
vague = findViewById(R.id.vague);

View File

@ -149,7 +149,7 @@ public class AuthActivity extends AbsActivity {
}
private void initCamera() {
cameraUtil = new ProcessImageUtil(this, "com.shayu.onetoone.fileprovider");
cameraUtil = new ProcessImageUtil(this, "${packageName}.fileprovider");
cameraUtil.setImageResultCallback(new ImageResultCallback() {
@Override
public void beforeCamera() {

View File

@ -172,7 +172,7 @@ public class AuthBloggerActivity extends AbsActivity {
};
private void initCamera() {
cameraUtil = new ProcessImageUtil(this, "com.shayu.onetoone.fileprovider");
cameraUtil = new ProcessImageUtil(this, "${packageName}.fileprovider");
cameraUtil.setImageResultCallback(new ImageResultCallback() {
@Override
public void beforeCamera() {

View File

@ -138,7 +138,7 @@ public class EditProfileActivity extends AbsActivity {
}
private void initCamera() {
cameraUtil = new ProcessImageUtil(this, "com.shayu.onetoone.fileprovider");
cameraUtil = new ProcessImageUtil(this, "${packageName}.fileprovider");
cameraUtil.setImageResultCallback(new ImageResultCallback() {
@Override
public void beforeCamera() {

View File

@ -57,6 +57,9 @@ public class OfficialNoticeBean extends BaseModel {
}
public int getNum() {
if (num < 0) {
num = 0;
}
return num;
}

View File

@ -69,7 +69,7 @@ public class UserBean extends BaseModel {
private int b_y;
private int b_ym;
private int b_ymd;
private int name_auth;
private int name_auth;//1 未提交 2 已认证 3已提交
private long name_auth_time;
private String auth_front;
private String auth_back;

View File

@ -2,7 +2,8 @@ package com.shayu.onetoone.event;
public class MessageMsgBusEvent extends AbsBusEvent {
public static final int TYPE_ALL_READ = 0;
public static final int TYPE_UPDATE_SYSTEM=1;
public static final int TYPE_UPDATE_POINT =1;
public static final int TYPE_UPDATE_SYSTEM =2;
private int num;

View File

@ -85,6 +85,37 @@ public class CallClientManager {
public void addOnVoIPCallListener(OnCallStatusListener statusListener) {
listeners.add(statusListener);
RongCallClient.getInstance().setVoIPCallListener(new CallStatusListener(new OnCallStatusListener() {
@Override
public void onCallWait(SurfaceView localVideo) {
for (OnCallStatusListener listener : listeners) {
listener.onCallWait(localVideo);
}
}
@Override
public void onCallStart(String userId, SurfaceView remoteVideo) {
for (OnCallStatusListener listener : listeners) {
listener.onCallStart(userId, remoteVideo);
}
startTimer(null);
}
@Override
public void onCallEnd() {
for (OnCallStatusListener listener : listeners) {
listener.onCallEnd();
}
endTimer();
}
@Override
public void onStartFirstFrame() {
for (OnCallStatusListener listener : listeners) {
listener.onStartFirstFrame();
}
}
}));
}
public void removeOnVoIPCallListener(OnCallStatusListener statusListener) {
@ -193,37 +224,6 @@ public class CallClientManager {
}
public void acceptCall(String callId) {
RongCallClient.getInstance().setVoIPCallListener(new CallStatusListener(new OnCallStatusListener() {
@Override
public void onCallWait(SurfaceView localVideo) {
for (OnCallStatusListener listener : listeners) {
listener.onCallWait(localVideo);
}
}
@Override
public void onCallStart(String userId, SurfaceView remoteVideo) {
for (OnCallStatusListener listener : listeners) {
listener.onCallStart(userId, remoteVideo);
}
startTimer(null);
}
@Override
public void onCallEnd() {
for (OnCallStatusListener listener : listeners) {
listener.onCallEnd();
}
endTimer();
}
@Override
public void onStartFirstFrame() {
for (OnCallStatusListener listener : listeners) {
listener.onStartFirstFrame();
}
}
}));
RongCallClient.getInstance().acceptCall(callId);
}

View File

@ -88,7 +88,7 @@ public class OTONetManager {
@Override
public void accept(ResponseModel<IMLoginModel> imLoginModelResponseModel) throws Exception {
if (callback != null) {
if(imLoginModelResponseModel.isError()){
if (imLoginModelResponseModel.isError()) {
JSONObject jsonSrc = imLoginModelResponseModel.getSrcJSONOBject();
callback.onError(jsonSrc.getJSONObject("data").getString("msg"));
return;
@ -1370,7 +1370,7 @@ public class OTONetManager {
}
public void getMenu( HttpCallback<List<UserItemBean>> callback) {
public void getMenu(HttpCallback<List<UserItemBean>> callback) {
API.get().otoApi(mContext).
getMenu()
.subscribeOn(Schedulers.io())
@ -1394,5 +1394,27 @@ public class OTONetManager {
}).isDisposed();
}
public void messageReadAll(HttpCallback<HttpCallbackModel> callback) {
API.get().otoApi(mContext).
messageReadAll()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(listResponseModel -> {
if (listResponseModel.getData().getCode() == 0) {
if(callback!=null) {
callback.onSuccess(new HttpCallbackModel(listResponseModel.getData().getCode(), listResponseModel.getData().getMsg()));
}
} else {
if(callback!=null) {
callback.onError(listResponseModel.getData().getMsg());
}
}
}, throwable -> {
if (callback != null) {
callback.onError(mContext.getString(com.yunbao.common.R.string.net_error));
}
}).isDisposed();
}
}

View File

@ -363,6 +363,8 @@ public interface OneToOneApi {
*/
@GET("/api/public/?service=Friendappinfos.getMenu")
Observable<ResponseModel<List<UserItemBean>>> getMenu();
@GET("/api/public/?service=Message.setMessageReadAll")
Observable<ResponseModel<List<BaseModel>>> messageReadAll();
}

View File

@ -0,0 +1,15 @@
package com.shayu.onetoone.utils;
import java.util.ArrayList;
import java.util.List;
import io.rong.imkit.conversation.extension.DefaultExtensionConfig;
import io.rong.imkit.conversation.extension.component.plugin.IPluginModule;
import io.rong.imlib.model.Conversation;
public class ChatPluginExtensionConfig extends DefaultExtensionConfig {
@Override
public List<IPluginModule> getPluginModules(Conversation.ConversationType conversationType, String targetId) {
return new ArrayList<>();
}
}

View File

@ -10,6 +10,7 @@ import com.yunbao.common.utils.ToastUtil;
import java.lang.reflect.Field;
import androidx.fragment.app.FragmentActivity;
import io.rong.imkit.conversation.extension.RongExtension;
public abstract class AbsInputPanel {
@ -19,6 +20,7 @@ public abstract class AbsInputPanel {
String targetId;
ViewGroup rootLayout;
View rootView;
boolean isShow = false;
public AbsInputPanel(String targetId, FragmentActivity mContext, RongExtension mRongExtension, int layout) {
this.mContext = mContext;
@ -38,16 +40,23 @@ public abstract class AbsInputPanel {
}
public int show() {
if (rootLayout.getVisibility() == View.VISIBLE) {
rootLayout.removeAllViews();
if (isShow) {
rootLayout.setVisibility(View.GONE);
isShow = false;
return View.GONE;
}
rootLayout.removeAllViews();
isShow = true;
rootLayout.addView(rootView);
rootLayout.setVisibility(View.VISIBLE);
return View.VISIBLE;
}
public void hide() {
rootLayout.removeAllViews();
rootLayout.setVisibility(View.GONE);
}
public abstract void init(View viewGroup);
}

View File

@ -1,5 +1,6 @@
package com.shayu.onetoone.view;
import android.app.Dialog;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
@ -16,6 +17,7 @@ import com.shayu.onetoone.bean.PurseBean;
import com.shayu.onetoone.bean.SendConsumeBean;
import com.shayu.onetoone.dialog.TipsDialog;
import com.shayu.onetoone.event.MoneyUpdateEvent;
import com.shayu.onetoone.listener.OnDialogClickListener;
import com.shayu.onetoone.listener.OnSendMessageListener;
import com.shayu.onetoone.manager.OTONetManager;
import com.shayu.onetoone.manager.SendMessageManager;
@ -96,8 +98,15 @@ public class MsgInputPanelForGift extends AbsInputPanel {
public void onError(int status, String msg) {
super.onError(status, msg);
new TipsDialog(mContext)
.setTitle(WordUtil.getNewString(R.string.not_money))
.setApplyText(WordUtil.getNewString(R.string.dialog_apply))
.setTitle(WordUtil.getNewString(R.string.gift_not_money))
.setApplyText(WordUtil.getNewString(R.string.money_apply))
.setOnDialogClickListener(new OnDialogClickListener() {
@Override
public void onApply(Dialog dialog) {
super.onApply(dialog);
ToastUtil.showDebug("沒有H5頁面");
}
})
.showDialog();
}
});

View File

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -132,7 +132,7 @@
android:layout_width="18dp"
android:layout_height="15dp"
android:src="@mipmap/diamond"
android:visibility="invisible"
android:visibility="gone"
tools:visibility="visible" />
<TextView

View File

@ -113,5 +113,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<include
android:id="@+id/view_empty"
layout="@layout/view_inter_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -112,5 +112,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<include
android:id="@+id/view_empty"
layout="@layout/view_notice_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -55,12 +55,14 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:orientation="horizontal"> 0
<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
tools:text="TextView"
android:textColor="#333333"
android:textSize="16sp"

View File

@ -51,7 +51,6 @@
android:id="@+id/rc_unread_message_count"
android:layout_width="wrap_content"
android:layout_height="@dimen/rc_unread_height"
android:layout_marginStart="3dp"
android:layout_marginTop="@dimen/rc_margin_size_30"
android:layout_marginEnd="5dp"
android:background="@drawable/rc_unread_msg_bg_style"
@ -72,7 +71,6 @@
android:id="@+id/rc_mention_message_count"
android:layout_width="wrap_content"
android:layout_height="@dimen/rc_unread_height"
android:layout_marginStart="3dp"
android:layout_marginTop="@dimen/rc_margin_size_80"
android:layout_marginEnd="5dp"
android:background="@drawable/rc_unread_msg_bg_style"

View File

@ -9,15 +9,15 @@
<ImageView
android:id="@+id/input_panel_voice_toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="81dp"
android:layout_height="87dp"
android:layout_marginStart="8dp"
android:layout_marginTop="6dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toTopOf="@+id/linearLayout2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/rc_ext_toggle_voice" />
app:srcCompat="@drawable/rc_ext_toggle_voice1" />
<EditText
android:id="@+id/edit_btn"
@ -153,11 +153,11 @@
<ImageView
android:id="@+id/input_panel_add_btn"
android:background="@color/yellow"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
android:src="@mipmap/ic_msg_add" />
android:background="@color/yellow"
android:src="@mipmap/ic_msg_add"
android:visibility="gone" />
</LinearLayout>
<LinearLayout

View File

@ -43,6 +43,7 @@
android:gravity="center"
android:paddingBottom="5dp"
android:textColor="#ffffff"
android:visibility="gone"
android:textSize="12dp"
app:layout_constraintBottom_toBottomOf="@id/rc_refresh"
app:layout_constraintEnd_toEndOf="parent"
@ -122,4 +123,15 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/view_empty"
layout="@layout/view_system_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/img_mess" />
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/view_friend_empty_text"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@+id/imageView7"
app:layout_constraintHorizontal_bias="0.433"
app:layout_constraintStart_toStartOf="@+id/imageView7"
app:layout_constraintTop_toBottomOf="@+id/imageView7" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/img_no_new" />
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/view_friend_empty_text"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@+id/imageView7"
app:layout_constraintHorizontal_bias="0.433"
app:layout_constraintStart_toStartOf="@+id/imageView7"
app:layout_constraintTop_toBottomOf="@+id/imageView7" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/img_on_official" />
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/view_friend_empty_text"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@+id/imageView7"
app:layout_constraintHorizontal_bias="0.433"
app:layout_constraintStart_toStartOf="@+id/imageView7"
app:layout_constraintTop_toBottomOf="@+id/imageView7" />
</androidx.constraintlayout.widget.ConstraintLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -35,11 +35,11 @@
<string name="choose_img_max">最多選&#160;%1$s&#160;張圖片哦</string>
<string name="view_friend_empty_text">暫無好友消息~</string>
<string name="not_money">餘額不足</string>
<string name="not_money_tips">文字聊天每條續消耗%s鑽您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_tips">文字聊天每條續消耗%s鑽您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="not_money_video_tips">與TA視頻聊天每分鐘續消耗%s鑽石,您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_audio_tips">與TA語音聊天每分鐘續消耗%s鑽石,您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_text_tips">聊天每條續消耗%s鑽您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_video_tips">與TA視頻聊天每分鐘續消耗%s星幣您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="not_money_audio_tips">與TA語音聊天每分鐘續消耗%s星幣您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="not_money_text_tips">聊天每條續消耗%s鑽您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="dialog_cancel_tip">離開</string>
<string name="dialog_to_money_tip">去充值</string>
<string name="chat_video_tips">發起視頻通話\n%s鑽/分鐘</string>
@ -263,4 +263,5 @@
<string name="dialog_call_prop_apply">收下獎勵</string>
<string name="toast_call_not_unlock">發送任意禮物后即可解鎖</string>
<string name="gift_not_money">余额不足,请充值后再进行尝试吧~</string>
</resources>

View File

@ -35,11 +35,11 @@
<string name="choose_img_max">最多選&#160;%1$s&#160;張圖片哦</string>
<string name="view_friend_empty_text">暫無好友消息~</string>
<string name="not_money">餘額不足</string>
<string name="not_money_tips">文字聊天每條續消耗%s鑽您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_tips">文字聊天每條續消耗%s鑽您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="not_money_video_tips">與TA視頻聊天每分鐘續消耗%s鑽石,您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_audio_tips">與TA語音聊天每分鐘續消耗%s鑽石,您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_text_tips">聊天每條續消耗%s鑽您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_video_tips">與TA視頻聊天每分鐘續消耗%s星幣您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="not_money_audio_tips">與TA語音聊天每分鐘續消耗%s星幣您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="not_money_text_tips">聊天每條續消耗%s鑽您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="dialog_cancel_tip">離開</string>
<string name="dialog_to_money_tip">去充值</string>
<string name="chat_video_tips">發起視頻通話\n%s鑽/分鐘</string>
@ -263,4 +263,5 @@
<string name="dialog_call_prop_apply">收下獎勵</string>
<string name="toast_call_not_unlock">發送任意禮物后即可解鎖</string>
<string name="gift_not_money">余额不足,请充值后再进行尝试吧~</string>
</resources>

View File

@ -36,12 +36,12 @@
<string name="view_friend_empty_text">friend empty</string>
<string name="not_money">餘額不足</string>
<string name="not_money_tips">"文字聊天每條續消耗%s鑽您可通過充值獲取更多鑽石,以便繼續聊天"</string>
<string name="not_money_tips">"文字聊天每條續消耗%s鑽您可通過充值獲取更多星幣以便繼續聊天"</string>
<string name="not_money_video_tips">與TA視頻聊天每分鐘續消耗%s鑽石,您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_audio_tips">與TA语音聊天每分鐘續消耗%s鑽石,您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_text_tips">聊天每條續消耗%s鑽您可通過充值獲取更多鑽石,以便繼續聊天</string>
<string name="not_money_video_tips">與TA視頻聊天每分鐘續消耗%s星幣您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="not_money_audio_tips">與TA语音聊天每分鐘續消耗%s星幣您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="not_money_text_tips">聊天每條續消耗%s鑽您可通過充值獲取更多星幣以便繼續聊天</string>
<string name="dialog_cancel_tip">離開</string>
<string name="dialog_to_money_tip">去充值</string>
<string name="chat_video_tips">发起视频通话\n%s钻/分钟</string>
@ -265,4 +265,5 @@
<string name="dialog_call_prop_apply">收下獎勵</string>
<string name="toast_call_not_unlock">發送任意禮物后即可解鎖</string>
<string name="gift_not_money">余额不足,请充值后再进行尝试吧~</string>
</resources>

View File

@ -3,8 +3,9 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_height="wrap_content">
tools:visibility="visible">
<ImageView
android:id="@+id/input_panel_voice_toggle"
@ -12,7 +13,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginBottom="6.5dp"
android:src="@drawable/rc_ext_toggle_voice"
android:src="@drawable/rc_ext_toggle_voice1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@ -32,7 +33,8 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/input_panel_emoji_btn"
app:layout_constraintStart_toEndOf="@+id/input_panel_voice_toggle"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<TextView
android:id="@+id/press_to_speech_btn"
@ -40,8 +42,8 @@
android:layout_width="0dp"
android:layout_height="@dimen/rc_ext_input_panel_editbox_height"
android:layout_marginStart="8dp"
android:layout_marginEnd="5dp"
android:layout_marginTop="6.5dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="6.5dp"
android:background="@drawable/rc_ext_voice_idle_button"
android:gravity="center"
@ -59,12 +61,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6.5dp"
android:layout_marginBottom="6.5dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="6.5dp"
android:src="@drawable/rc_ext_input_panel_emoji"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@+id/input_panel_add_or_send" />
app:layout_constraintEnd_toStartOf="@+id/input_panel_add_or_send"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/input_panel_add_or_send"