Browse Source

优化云教练校音评测流程

Pq 1 year ago
parent
commit
0e55fb364d

+ 22 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/UiUtils.java

@@ -17,9 +17,11 @@ import android.text.style.TextAppearanceSpan;
 import android.util.DisplayMetrics;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.TextView;
 
 import com.cooleshow.base.R;
 import com.cooleshow.base.common.BaseApplication;
+import com.cooleshow.base.widgets.DialogUtil;
 import com.cooleshow.base.widgets.span.QMUIAlignMiddleImageSpan;
 import com.rui.common_base.widget.span.CenterImageSpan;
 
@@ -31,6 +33,8 @@ import java.util.Date;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import androidx.fragment.app.FragmentManager;
+
 /**
  * Description:
  * Copyright  : Copyright (c) 2019
@@ -362,4 +366,22 @@ public class UiUtils {
         }
         return stringBuilder.toString();
     }
+
+    public static void showPermissionTipDialog(FragmentManager fragmentmanager, Context context, String title, String tip) {
+        DialogUtil.showInCenter(fragmentmanager, com.cooleshow.base.R.layout.accompany_permissions_popu, (holder, dialog) -> {
+            TextView tvTitle = holder.getView(com.cooleshow.base.R.id.tv_title);
+            TextView tvContent = holder.getView(com.cooleshow.base.R.id.tv_content);
+            View btncancel = holder.getView(com.cooleshow.base.R.id.btn_cancel);
+            View btnCommit = holder.getView(com.cooleshow.base.R.id.btn_commit);
+            tvTitle.setText(title);
+            tvContent.setText(tip);
+            btncancel.setOnClickListener(view1 -> {
+                dialog.dismiss();
+            });
+            btnCommit.setOnClickListener(view1 -> {
+                PermissionUtils.toSelfSetting(context);
+                dialog.dismiss();
+            });
+        });
+    }
 }

+ 7 - 3
accompany/src/main/java/com/daya/orchestra/accompany/helper/AccompanyPlayHelper.java

@@ -95,12 +95,13 @@ public class AccompanyPlayHelper implements MediaPlayer.OnCompletionListener {
             CustomPlayer player = getPlayer();
             int cu = player.getCu();
             int duration = player.getT();
-            if (cu > 1000) {
+            int exceptTargetPos = player.getExceptTargetPos(cu);
+            if (exceptTargetPos > 1000) {
                 if (isTag) {
-                    LOG.i(TAG, "第二段cu:" + cu);
+                    LOG.i(TAG, "第二段cu:" + exceptTargetPos);
                     LOG.i(TAG, "第二段duration:" + duration);
                     long cTime = System.currentTimeMillis();
-                    long endTime = cTime - cu;
+                    long endTime = cTime - exceptTargetPos;
                     realPlayStartTime = endTime;
                     long delayTime = endTime - startPlayTime;
                     LOG.i(TAG, "第二段 delayTime:" + delayTime);
@@ -137,6 +138,7 @@ public class AccompanyPlayHelper implements MediaPlayer.OnCompletionListener {
     }
 
     public void startTune(JSONObject message) {
+        onSendMessage(message.toString());
         JSONObject contentJson = message.optJSONObject("content");
         if (contentJson != null) {
             String count = contentJson.optString("count", "");
@@ -335,6 +337,7 @@ public class AccompanyPlayHelper implements MediaPlayer.OnCompletionListener {
         loopHandler.removeCallbacks(mTuneRunnable);
         loopHandler.postDelayed(mTuneRunnable, 10);
         getPlayer().stop();
+        getPlayer().setPrepareSeekPosition(-1);
         getPlayer().play(false, tuneSrc);
 //        String fileName;
 //        LOG.i("pq", "toPlayTuneMusic" + delayCheckResults.size());
@@ -528,6 +531,7 @@ public class AccompanyPlayHelper implements MediaPlayer.OnCompletionListener {
         loopHandler.removeCallbacksAndMessages(null);
         loopHandler.postDelayed(mRunnable2, 10);
         getPlayer().stop();
+//        getPlayer().setPrepareSeekPosition(0);
         getPlayer().play(isMute, musicSrc);
     }
 

+ 20 - 0
accompany/src/main/java/com/daya/orchestra/accompany/player/CustomPlayer.java

@@ -24,6 +24,8 @@ public class CustomPlayer implements MediaPlayer.OnErrorListener, MediaPlayer.On
     private boolean isNeedMute = false;
     private AudioManager mAudioManager;
 
+    private int prepareSeekPosition = -1;//此字段用于选段播放
+
     public CustomPlayer() {
         initPlayer();
     }
@@ -70,6 +72,20 @@ public class CustomPlayer implements MediaPlayer.OnErrorListener, MediaPlayer.On
         }
     }
 
+    public int getPrepareSeekPosition() {
+        return prepareSeekPosition;
+    }
+
+    public int getExceptTargetPos(int cu) {
+        //用于选段评测流程 如果有选段快进则需要 按照快进开播播放的位置取
+        int targetPos = getPrepareSeekPosition() != -1 ? cu - getPrepareSeekPosition() : cu;
+        return targetPos;
+    }
+
+    public void setPrepareSeekPosition(int prepareSeekPosition) {
+        this.prepareSeekPosition = prepareSeekPosition;
+    }
+
     public int getCu() {
         if (mPlayer != null) {
             int currentPosition = mPlayer.getCurrentPosition();
@@ -95,6 +111,9 @@ public class CustomPlayer implements MediaPlayer.OnErrorListener, MediaPlayer.On
         if (null != mPlayer && hasPrepared) {
             mPlayer.start();
             setVolume(isNeedMute ? 0f : 1f);
+            if (prepareSeekPosition != -1) {
+                seekTo(prepareSeekPosition);
+            }
         }
     }
 
@@ -136,6 +155,7 @@ public class CustomPlayer implements MediaPlayer.OnErrorListener, MediaPlayer.On
         if (mPlayer == null) {
             return;
         }
+        prepareSeekPosition = -1;
         isStoped = true;
         hasPrepared = false;
         Log.i(TAG, "player to stop:" + hasPrepared + "-thread:" + Thread.currentThread().getName());

+ 13 - 17
accompany/src/main/java/com/daya/orchestra/accompany/web/AccompanyFragment.java

@@ -56,6 +56,7 @@ import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.MyFileUtils;
 import com.cooleshow.base.utils.PermissionUtils;
 import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.base.utils.UiUtils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.utils.WebParamsUtils;
 import com.cooleshow.base.websocket.JWebSocketClient;
@@ -2127,27 +2128,22 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
                             mPlayHelper.startTune(message);
                         }
                     } else {
-                        DialogUtil.showInCenter(getChildFragmentManager(), com.cooleshow.base.R.layout.accompany_permissions_popu, (holder, dialog) -> {
-                            TextView tvTitle = holder.getView(com.cooleshow.base.R.id.tv_title);
-                            TextView tvContent = holder.getView(com.cooleshow.base.R.id.tv_content);
-                            View btncancel = holder.getView(com.cooleshow.base.R.id.btn_cancel);
-                            View btnCommit = holder.getView(com.cooleshow.base.R.id.btn_commit);
-                            tvTitle.setText("提示");
-                            tvContent.setText("请开启麦克风访问权限");
-                            btncancel.setOnClickListener(view1 -> {
-
-                                dialog.dismiss();
-
-                            });
-                            btnCommit.setOnClickListener(view1 -> {
-                                PermissionUtils.toSelfSetting(getContext());
-                                dialog.dismiss();
-                            });
-                        });
+                        sendNoPermissionMsg(message,"没有麦克风权限");
+                        UiUtils.showPermissionTipDialog(getChildFragmentManager(),getContext(),"提示","请开启麦克风访问权限");
                     }
                 });
     }
 
+    private void sendNoPermissionMsg(JSONObject message,String tip){
+        try {
+            JSONObject content = message.getJSONObject("content");
+            content.put("reson", tip);
+            onSendMessage(message.toString());
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
     @Override
     public void endTune(JSONObject message) {
         if (mPlayHelper != null) {