This commit is contained in:
2023-10-11 00:22:16 +08:00
parent da6ca4fbbb
commit 6d495d11fd
16 changed files with 1744 additions and 135 deletions

View File

@@ -6,6 +6,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
@@ -15,25 +16,32 @@ import androidx.fragment.app.Fragment;
*/
public abstract class BaseFragment extends Fragment {
public Context mContext;
private View itemView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View itemView = createView(inflater, container, savedInstanceState);
this.mContext = getContext();
this.itemView = itemView;
initView(itemView);
return itemView;
}
public <T extends View> T findViewById(@IdRes int id) {
return itemView.findViewById(id);
}
/**
* 初始化页面
*
* @param itemView 布局view
*/
public abstract void initView(View itemView);
/**
* 创建页面
*
* @return 布局
*/
public abstract View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);

View File

@@ -0,0 +1,41 @@
package com.shayu.onetoone.activity.fragments;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.shayu.onetoone.R;
import com.shayu.onetoone.adapter.GiftListAdapter;
import com.shayu.onetoone.bean.GiftBean;
import java.util.List;
import androidx.recyclerview.widget.RecyclerView;
public class GiftDialogFragment extends BaseFragment {
private RecyclerView recyclerView;
private GiftListAdapter mAdapter;
List<GiftBean> list;
public GiftDialogFragment() {
}
public void setList(List<GiftBean> list) {
this.list = list;
mAdapter.setList(list);
}
@Override
public void initView(View itemView) {
recyclerView = findViewById(R.id.recyclerView);
mAdapter = new GiftListAdapter(getContext());
recyclerView.setAdapter(mAdapter);
}
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_gift, container, false);
}
}

View File

@@ -30,6 +30,8 @@ import com.shayu.onetoone.listener.OnDialogClickListener;
import com.shayu.onetoone.listener.OnSendMessageListener;
import com.shayu.onetoone.manager.OTONetManager;
import com.shayu.onetoone.manager.SendMessageManager;
import com.shayu.onetoone.view.MsgInputPanelForAudio;
import com.shayu.onetoone.view.MsgInputPanelForGift;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.base.HttpCallback;
@@ -67,12 +69,6 @@ public class ChatMessageFragment extends AbsConversationFragment {
ProcessImageUtil cameraUtil;
String targetId;
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
ViewGroup audioLayout;
ImageView btnAudio;
ImageView btnText;
ImageView btnClose;
private float mLastTouchY;
private boolean mUpDirection;
RoundedImageView avatar;
@@ -88,9 +84,9 @@ public class ChatMessageFragment extends AbsConversationFragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
targetId = getActivity().getIntent().getStringExtra("targetId");
initBtn();
initChat();
targetId = getActivity().getIntent().getStringExtra("targetId");
cameraUtil = new ProcessImageUtil(getActivity(), "com.shayu.onetoone.fileprovider");
mRongExtension.setVisibility(View.VISIBLE);
@@ -176,114 +172,32 @@ public class ChatMessageFragment extends AbsConversationFragment {
});
}
@SuppressLint("ClickableViewAccessibility")
MsgInputPanelForAudio audio;
MsgInputPanelForGift giftPanel;
private void initBtn() {
try {
Field field = mRongExtension.getInputPanel().getClass().getDeclaredField("mInputPanel");
field.setAccessible(true);
mInputPanel = (View) field.get(mRongExtension.getInputPanel());
assert mInputPanel != null;
mSendBtn = mInputPanel.findViewById(R.id.send_btn);
ImageView mVoiceToggleBtn = (ImageView) mInputPanel.findViewById(R.id.input_panel_voice_toggle);
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);
ImageView mVoiceToggleBtn = (ImageView) mInputPanel.getRootView().findViewById(R.id.input_panel_voice_toggle);
assert mVoiceToggleBtn != null;
mVoiceToggleBtn.setOnClickListener(v -> {
SendMessageManager.sendMessageForAudio(targetId, new OnSendMessageListener() {
@Override
public void onSuccess(String token) {
super.onSuccess(token);
ChatMessageFragment.this.token = token;
changeAudioLayout();
}
@Override
public void onError(int status, String msg) {
super.onError(status, msg);
if (status == OnSendMessageListener.STATUS_NOT_PRICE) {
new TipsDialog(mContext)
.setTitle("餘額不足")
.setContent(String.format("聊天每條續消耗%s鑽您可通過充值獲取更多鑽石以便繼續聊天", msg))
.setOnDialogClickListener(new OnDialogClickListener() {
@Override
public void onApply(Dialog dialog) {
super.onApply(dialog);
}
}).showDialog();
} else {
ToastUtil.show(msg);
}
}
});
audio = new MsgInputPanelForAudio(targetId, getActivity(), mRongExtension);
giftPanel = new MsgInputPanelForGift(targetId, getActivity(), mRongExtension);
mVoiceToggleBtn.setOnClickListener(view -> {
audio.show();
});
img = mInputPanel.findViewById(R.id.input_panel_image_btn);
video = mInputPanel.findViewById(R.id.input_panel_video_btn);
call = mInputPanel.findViewById(R.id.input_panel_call_btn);
gift = mInputPanel.findViewById(R.id.input_panel_gift_btn);
audioLayout = mInputPanel.findViewById(R.id.audio_layout);
audioLayout.addView(LayoutInflater.from(mContext).inflate(R.layout.view_message_input_audio, (ViewGroup) mInputPanel,false));
btnAudio = audioLayout.findViewById(R.id.audio_btn);
btnText = audioLayout.findViewById(R.id.text_btn);
btnClose = audioLayout.findViewById(R.id.close_btn);
mEditText = audioLayout.findViewById(R.id.edit_btn);
btnText.setOnClickListener(v -> changeAudioLayout());
btnClose.setOnClickListener(v -> changeAudioLayout());
btnAudio.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float mOffsetLimit = 70.0F * v.getContext().getResources().getDisplayMetrics().density;
String[] permissions = new String[]{"android.permission.RECORD_AUDIO"};
if (!PermissionCheckUtil.checkPermissions(v.getContext(), permissions) && event.getAction() == 0) {
PermissionCheckUtil.requestPermissions(ChatMessageFragment.this, permissions, 100);
return true;
} else {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (AudioPlayManager.getInstance().isPlaying()) {
AudioPlayManager.getInstance().stopPlay();
}
if (RongOperationPermissionUtils.isOnRequestHardwareResource()) {
Toast.makeText(v.getContext(), v.getContext().getResources().getString(io.rong.imkit.R.string.rc_voip_occupying), Toast.LENGTH_SHORT).show();
return true;
}
ChatMessageFragment.this.mLastTouchY = event.getY();
ChatMessageFragment.this.mUpDirection = false;
AudioRecordManager.getInstance().startRecord(v.getRootView(), mRongExtension.getConversationIdentifier());
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (ChatMessageFragment.this.mLastTouchY - event.getY() > mOffsetLimit && !ChatMessageFragment.this.mUpDirection) {
AudioRecordManager.getInstance().willCancelRecord();
ChatMessageFragment.this.mUpDirection = true;
} else if (event.getY() - ChatMessageFragment.this.mLastTouchY > -mOffsetLimit && ChatMessageFragment.this.mUpDirection) {
AudioRecordManager.getInstance().continueRecord();
ChatMessageFragment.this.mUpDirection = false;
}
} else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
AudioRecordManager.getInstance().stopRecord();
SendMessageManager.onCallSuccess(token, new OnSendMessageListener() {
@Override
public void onError(int status, String msg) {
super.onError(status, msg);
ToastUtil.show(msg);
}
});
}
if (mRongExtension.getConversationIdentifier().getType().equals(Conversation.ConversationType.PRIVATE)) {
RongIMClient.getInstance().sendTypingStatus(mRongExtension.getConversationIdentifier().getType(),
mRongExtension.getConversationIdentifier().getTargetId(), "RC:VcMsg");
}
}
return true;
}
});
gift.setOnClickListener(v -> {
new GiftDialog(mContext).showDialog();
giftPanel.show();
});
} catch (Exception e) {
e.printStackTrace();
@@ -291,14 +205,6 @@ public class ChatMessageFragment extends AbsConversationFragment {
}
}
private void changeAudioLayout() {
if (audioLayout.getVisibility() == View.VISIBLE) {
audioLayout.setVisibility(View.GONE);
SendMessageManager.cancel(token);
} else {
audioLayout.setVisibility(View.VISIBLE);
}
}
private void sendText() {
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;