|
@@ -48,14 +48,16 @@ import com.cooleshow.base.utils.UiUtils;
|
|
|
import com.cooleshow.base.utils.UrlUtils;
|
|
|
import com.cooleshow.base.utils.helper.CommonShareHelper;
|
|
|
import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
|
|
|
+import com.cooleshow.base.utils.helper.WebStartHelper;
|
|
|
import com.cooleshow.base.utils.helper.upload.UploadHelper;
|
|
|
import com.cooleshow.base.widgets.dialog.CommonConfirmDialog2;
|
|
|
-import com.cooleshow.base.widgets.dialog.ShareDialog;
|
|
|
+import com.cooleshow.musicmerge.widget.ShareDialog;
|
|
|
import com.cooleshow.musicmerge.R;
|
|
|
import com.cooleshow.musicmerge.bean.MusicDataBean;
|
|
|
import com.cooleshow.musicmerge.bean.MusicInfoBean;
|
|
|
import com.cooleshow.musicmerge.bean.MusicMergeConfigBean;
|
|
|
import com.cooleshow.musicmerge.callback.ResultCallback;
|
|
|
+import com.cooleshow.musicmerge.constants.MHWebApi;
|
|
|
import com.cooleshow.musicmerge.constants.MergeConfig;
|
|
|
import com.cooleshow.musicmerge.constants.MusicMergeConfig;
|
|
|
import com.cooleshow.musicmerge.contract.MusicFileHandleContract;
|
|
@@ -66,6 +68,7 @@ import com.cooleshow.musicmerge.player.MergeTrackManager;
|
|
|
import com.cooleshow.musicmerge.presenter.MusicFileHandlePresenter;
|
|
|
import com.cooleshow.musicmerge.viewmodel.MusicMergeViewModel;
|
|
|
import com.cooleshow.musicmerge.widget.MergeLoadingTipDialog;
|
|
|
+import com.cooleshow.usercenter.helper.UserHelper;
|
|
|
import com.luck.picture.lib.PictureSelector;
|
|
|
import com.luck.picture.lib.entity.LocalMedia;
|
|
|
import com.umeng.socialize.UMShareAPI;
|
|
@@ -77,8 +80,12 @@ import java.util.List;
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
import androidx.annotation.Nullable;
|
|
|
+import androidx.constraintlayout.widget.ConstraintLayout;
|
|
|
+import androidx.lifecycle.Observer;
|
|
|
import androidx.lifecycle.ViewModelProvider;
|
|
|
|
|
|
+import static com.cooleshow.base.common.WebConstants.WEB_URL;
|
|
|
+
|
|
|
/**
|
|
|
* Author by pq, Date on 2023/8/28.
|
|
|
*/
|
|
@@ -127,6 +134,11 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
|
|
|
private float accompanyPlaySpeed = MergeConfig.DEFAULT_PLAY_SPEED;
|
|
|
private MergeTrackManager audioPlayer;
|
|
|
+ private MusicScoreFragment mMusicScoreFragment;
|
|
|
+
|
|
|
+ private String musicRenderType = MusicMergeConfig.STAFF;
|
|
|
+ private boolean hasWorks = false;//是否已经生成了作品
|
|
|
+ private int partIndex;
|
|
|
|
|
|
@Override
|
|
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
|
@@ -138,6 +150,10 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
protected void initView() {
|
|
|
mTitle = getIntent().getStringExtra("title");
|
|
|
viewBinding.tvTitle.setText(mTitle);
|
|
|
+ UiUtils.setTextMarquee(viewBinding.tvTitle);
|
|
|
+ String userName = UserHelper.getUserName();
|
|
|
+ viewBinding.tvTitle2.setVisibility(TextUtils.isEmpty(userName) ? View.GONE : View.VISIBLE);
|
|
|
+ viewBinding.tvTitle2.setText("演奏: " + userName);
|
|
|
int c_orientation = getIntent().getIntExtra("c_orientation", ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
|
|
isNeedResetScreenOrientation = c_orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
|
|
|
|
|
@@ -151,12 +167,46 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
bundle.putInt("defaultDelay", defaultDelay);
|
|
|
mSettingFragment.setArguments(bundle);
|
|
|
getSupportFragmentManager().beginTransaction().replace(R.id.fl_setting, mSettingFragment).commitAllowingStateLoss();
|
|
|
+
|
|
|
+ String musicSheetId = getIntent().getStringExtra("musicSheetId");
|
|
|
+ String musicRenderType = getIntent().getStringExtra("musicRenderType");
|
|
|
+ if (TextUtils.isEmpty(musicRenderType)) {
|
|
|
+ musicRenderType = MusicMergeConfig.STAFF;
|
|
|
+ }
|
|
|
+ this.musicRenderType = musicRenderType;
|
|
|
+ if (!TextUtils.isEmpty(musicSheetId)) {
|
|
|
+ boolean isVideo = MyFileUtils.isVideo(recordFilePath);
|
|
|
+ initMusicScoreFragment(musicSheetId, this.musicRenderType, isVideo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initMusicScoreFragment(String musicId, String musicRenderType, boolean isVideo) {
|
|
|
+ if (mMusicScoreFragment == null) {
|
|
|
+ mMusicScoreFragment = new MusicScoreFragment();
|
|
|
+ Bundle bundle = new Bundle();
|
|
|
+ if(isVideo){
|
|
|
+ viewBinding.flMusicScoreContainer.setBackgroundResource(R.drawable.shape_mh_music_score_bg);
|
|
|
+ }else{
|
|
|
+ viewBinding.flMusicScoreContainer.setBackgroundColor(Color.TRANSPARENT);
|
|
|
+ }
|
|
|
+ bundle.putString(WEB_URL, createUrl(musicId, musicRenderType, isVideo));
|
|
|
+ mMusicScoreFragment.setArguments(bundle);
|
|
|
+ getSupportFragmentManager().beginTransaction().replace(R.id.fl_music_score_container, mMusicScoreFragment).commitAllowingStateLoss();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private String createUrl(String musicId, String musicRenderType, boolean isVideo) {
|
|
|
+ //五线谱:staff、简谱:firstTone、固定音高:fixedTone
|
|
|
+// return "https://dev.kt.colexiu.com/instrument/#/simple-detail?id=1001728&musicRenderType=staff";
|
|
|
+// return "https://www.baidu.com";
|
|
|
+ return WebStartHelper.getWorksMusicScoreUrl(musicId, musicRenderType,String.valueOf(partIndex), isVideo);
|
|
|
}
|
|
|
|
|
|
private void initSurfaceView() {
|
|
|
initVideoUIStyle();
|
|
|
mViewModel.getVideoFilePath().setValue(recordFilePath);
|
|
|
viewBinding.groupAudioView.setVisibility(View.GONE);
|
|
|
+ viewBinding.musicFrequencyView.setVisibility(View.GONE);
|
|
|
viewBinding.flSurface.setVisibility(View.VISIBLE);
|
|
|
viewBinding.viewVideoTopBg.setVisibility(View.VISIBLE);
|
|
|
viewBinding.viewVideoBottomBg.setVisibility(View.VISIBLE);
|
|
@@ -170,6 +220,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
|
|
|
private void initVideoUIStyle() {
|
|
|
viewBinding.tvTitle.setTextColor(Color.WHITE);
|
|
|
+ viewBinding.tvTitle2.setTextColor(Color.WHITE);
|
|
|
viewBinding.ivBack.setImageResource(com.cooleshow.base.R.drawable.ic_back_white);
|
|
|
viewBinding.ivPlay.setImageResource(R.drawable.icon_music_merge_play_white);
|
|
|
viewBinding.tvCurrentProgress.setTextColor(Color.WHITE);
|
|
@@ -198,6 +249,8 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
defaultDelay = getIntent().getIntExtra("defaultDelay", 0);
|
|
|
evaluateDelay = Math.abs(getIntent().getIntExtra("evaluateDelay", 0));
|
|
|
accompanyPlaySpeed = getIntent().getFloatExtra(MusicMergeConfig.SPEEDRATE_KEY, MergeConfig.DEFAULT_PLAY_SPEED);
|
|
|
+ partIndex = getIntent().getIntExtra(MusicMergeConfig.PART_INDEX_KEY, 0);
|
|
|
+
|
|
|
loadCover();
|
|
|
if (TextUtils.isEmpty(mRecordId)) {
|
|
|
ToastUtil.getInstance().showShort("作品生成失败");
|
|
@@ -213,18 +266,30 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
initPlayer();
|
|
|
LOG.i("recordFilePath:" + recordFilePath);
|
|
|
LOG.i("accompanyUrl:" + accompanyUrl);
|
|
|
+ showAssetsLoading();
|
|
|
if (!checkRecordFile()) {
|
|
|
if (!TextUtils.isEmpty(worksId)) {
|
|
|
+ hasWorks = true;
|
|
|
presenter.getDetail(worksId);
|
|
|
+ mViewModel.getIsCanRetryRecord().setValue(false);
|
|
|
} else {
|
|
|
ToastUtil.getInstance().showShort("作品生成失败");
|
|
|
finish();
|
|
|
}
|
|
|
} else {
|
|
|
preLoad();
|
|
|
+ presenter.getDetailByRecordId(mRecordId);
|
|
|
+ mViewModel.getIsCanRetryRecord().setValue(true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void showAssetsLoading() {
|
|
|
+ showLoadingAndCancel(getString(R.string.mh_loading_str));
|
|
|
+ setLoadingCancelable(false);
|
|
|
+// setLoadingStyle(getResources().getDrawable(R.drawable.mh_shape_loading_bg), 16);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
private void initViewModel() {
|
|
|
ViewModelProvider.AndroidViewModelFactory instance =
|
|
|
ViewModelProvider.AndroidViewModelFactory
|
|
@@ -233,6 +298,81 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
.get(MusicMergeViewModel.class);
|
|
|
mViewModel.getWorksId().setValue(worksId);
|
|
|
refreshMusicInfo(imgCover);
|
|
|
+
|
|
|
+ mViewModel.getMusicScoreHeightInfo().observe(this, new Observer<Integer>() {
|
|
|
+ @Override
|
|
|
+ public void onChanged(Integer height) {
|
|
|
+ if (viewBinding == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (height != null && height > 0) {
|
|
|
+ viewBinding.flMusicScoreContainer.setVisibility(View.VISIBLE);
|
|
|
+ ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) viewBinding.flMusicScoreContainer.getLayoutParams();
|
|
|
+ layoutParams.height = height;
|
|
|
+ viewBinding.flMusicScoreContainer.setLayoutParams(layoutParams);
|
|
|
+ toCheckIsPlay();
|
|
|
+ if (mViewModel != null) {
|
|
|
+ LOG.i("曲谱加载完成");
|
|
|
+ mViewModel.addHandleStep();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ viewBinding.flMusicScoreContainer.setVisibility(View.GONE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ mViewModel.getStepInfo().observe(this, new Observer<Integer>() {
|
|
|
+ @Override
|
|
|
+ public void onChanged(Integer value) {
|
|
|
+ LOG.i("getStepInfo onChanged:" + value);
|
|
|
+ if (value != null) {
|
|
|
+ if (mViewModel.isCompletedAllStep()) {
|
|
|
+ hideLoading();
|
|
|
+ toPlay(getAccompanyPath());
|
|
|
+ } else {
|
|
|
+ if (value == MusicMergeConfig.MAX_MUST_HANDLE_STEP - 1) {
|
|
|
+ //其他步骤已经完成,判断是否显示引导页
|
|
|
+ checkGuide();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void toCheckIsPlay() {
|
|
|
+ if (isPlaying()) {
|
|
|
+ syncPlayStatusToH5(MHWebApi.API_PLAY);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void syncPlayStatusToH5(String api) {
|
|
|
+ if (mMusicScoreFragment != null) {
|
|
|
+ if (TextUtils.equals(api, MHWebApi.API_PAUSED)) {
|
|
|
+ long playProgress = getAudioPlayer().getPlayProgress();
|
|
|
+ long result = (long) (playProgress * accompanyPlaySpeed);
|
|
|
+ double second = (double) result / 1000;
|
|
|
+ mMusicScoreFragment.sendApiEvent(api, second);
|
|
|
+ } else {
|
|
|
+ mMusicScoreFragment.sendApiEvent(api);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void syncPlayProgressToH5(long progress) {
|
|
|
+ if (mMusicScoreFragment != null) {
|
|
|
+ long result = (long) (progress * accompanyPlaySpeed);
|
|
|
+ mMusicScoreFragment.sendProgressEvent(result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void syncSeekResultToH5(int seekResult) {
|
|
|
+ if (isPlaying()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (mMusicScoreFragment != null) {
|
|
|
+ mMusicScoreFragment.sendUpdateProgressEvent(seekResult);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void preLoad() {
|
|
@@ -261,7 +401,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
|
|
|
private void toCreateWavFile() {
|
|
|
setLoadingCancelable(false);
|
|
|
- showLoading("草稿处理中");
|
|
|
+ showAssetsLoading();
|
|
|
String wavFileSavePath = MixHelper.getInstance().getWavFileSavePath(recordFilePath, MyFileUtils.WAV_FILE_SUFFIX);
|
|
|
MixHelper.getInstance().getWavFromMp4(recordFilePath, wavFileSavePath, new ResultCallback<String>() {
|
|
|
@Override
|
|
@@ -272,7 +412,6 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
runOnUiThread(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
- hideLoading();
|
|
|
if (!TextUtils.isEmpty(s)) {
|
|
|
recordWavFilePath = s;
|
|
|
preLoad();
|
|
@@ -368,6 +507,12 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
public void pausePlay() {
|
|
|
MusicHandleActivity_.this.pausePlay();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void retryRecord() {
|
|
|
+ showRetryRecordTip();
|
|
|
+ }
|
|
|
});
|
|
|
viewBinding.seekPlay.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
|
|
@Override
|
|
@@ -509,6 +654,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+
|
|
|
@Override
|
|
|
public void onUploadProgress(double v) {
|
|
|
toUpdateLoadingText(getCurrentProgress((int) v), getString(R.string.upload_works_tip));
|
|
@@ -520,7 +666,10 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
}
|
|
|
|
|
|
private void toNotify(String url) {
|
|
|
- String configJson = mSettingFragment.getConfigJson(defaultDelay, evaluateDelay);
|
|
|
+ if (!checkActivityExist()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String configJson = mSettingFragment.getConfigJson(defaultDelay, evaluateDelay, musicRenderType, partIndex);
|
|
|
MusicInfoBean value = mViewModel.getMusicInfoLiveData().getValue();
|
|
|
String videoCover = "";
|
|
|
String cover = imgCover;
|
|
@@ -539,8 +688,11 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
}
|
|
|
|
|
|
private void toNotifyDraft(String url) {
|
|
|
+ if (!checkActivityExist()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
if (mSettingFragment != null) {
|
|
|
- String configJson = mSettingFragment.getConfigJson(defaultDelay, evaluateDelay);
|
|
|
+ String configJson = mSettingFragment.getConfigJson(defaultDelay, evaluateDelay, musicRenderType, partIndex);
|
|
|
presenter.saveDraft(mRecordId, url, accompanyUrl, imgCover, configJson);
|
|
|
}
|
|
|
}
|
|
@@ -683,6 +835,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
int seekResult = (int) (getAudioTotalDuration() * percent);
|
|
|
LOG.i("pq", "seekResult:" + seekResult);
|
|
|
getAudioPlayer().seekPercent(percent);
|
|
|
+ syncSeekResultToH5(seekResult);
|
|
|
|
|
|
if (isVideo) {
|
|
|
int seekResult2 = countAccompanyPosition(seekResult);
|
|
@@ -816,6 +969,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
//拖拽的时候不更新
|
|
|
viewBinding.seekPlay.setProgress(percent);
|
|
|
}
|
|
|
+ syncPlayProgressToH5(progress);
|
|
|
}
|
|
|
|
|
|
private void setDurationText() {
|
|
@@ -865,6 +1019,12 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
}
|
|
|
|
|
|
private void toRealPlayVideo() {
|
|
|
+ //步骤没加载完成,不播放视频
|
|
|
+ if (!mViewModel.isCompletedAllStep()) {
|
|
|
+ //预加载显示画面
|
|
|
+ player2.seekTo(0);
|
|
|
+ return;
|
|
|
+ }
|
|
|
if (audioPlayDuration != 0 && videoPlayDuration != 0) {
|
|
|
player2.resetToPrepare();
|
|
|
player2.start();
|
|
@@ -942,14 +1102,31 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
}
|
|
|
|
|
|
private void toPlay(String accompanyPath) {
|
|
|
-
|
|
|
+ LOG.i("toPlay:" + accompanyPath);
|
|
|
+ LOG.i("toPlay:" + Thread.currentThread().getName());
|
|
|
+ LOG.i("toPlay:" + recordFilePath);
|
|
|
+ prepareVideoIfNeed();
|
|
|
+ if (!mViewModel.isCompletedAllStep()) {
|
|
|
+ //主要流程文件下载处理完毕
|
|
|
+ LOG.i("音视频文件加载完成");
|
|
|
+ mViewModel.addHandleStep();
|
|
|
+ return;
|
|
|
+ }
|
|
|
String[] files = new String[]{accompanyPath, recordWavFilePath};
|
|
|
getAudioPlayer().play2(files);
|
|
|
- if (isVideo) {
|
|
|
+ }
|
|
|
+
|
|
|
+ private void prepareVideoIfNeed() {
|
|
|
+ if (isVideo && !videoIsPrepare()) {
|
|
|
player2.play(recordFilePath);
|
|
|
+ player2.setSurface(new Surface(mSurfaceTexture));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private boolean videoIsPrepare() {
|
|
|
+ return videoPlayDuration != 0;
|
|
|
+ }
|
|
|
+
|
|
|
private boolean checkRecordFile(String recordUrl) {
|
|
|
String fileEndSuffix = MyFileUtils.getWAVOrMp4FileSuffix(recordUrl);
|
|
|
String wavFileSavePath = MixHelper.getInstance().getWavFileSavePath(recordUrl, MyFileUtils.WAV_FILE_SUFFIX);
|
|
@@ -969,7 +1146,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
}
|
|
|
LOG.i("pq", "下载草稿");
|
|
|
setLoadingCancelable(false);
|
|
|
- showLoading("草稿下载中");
|
|
|
+ showAssetsLoading();
|
|
|
MixHelper.getInstance().downloadOriginalFile(recordUrl, fileEndSuffix, new ResultCallback<String>() {
|
|
|
@Override
|
|
|
public void onSuccess(String s) {
|
|
@@ -985,7 +1162,6 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
runOnUiThread(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
- hideLoading();
|
|
|
preLoad();
|
|
|
}
|
|
|
});
|
|
@@ -999,7 +1175,8 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
runOnUiThread(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
- updateLoadingText("草稿下载中" + progressPercent + "%");
|
|
|
+// updateLoadingText("草稿下载中" + progressPercent + "%");
|
|
|
+ updateLoadingText(getString(R.string.mh_loading_str));
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -1037,7 +1214,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
return false;
|
|
|
}
|
|
|
setLoadingCancelable(false);
|
|
|
- showLoading("伴奏下载中");
|
|
|
+ showAssetsLoading();
|
|
|
MixHelper.getInstance().downloadAccompany(accompanyUrl, accompanyPlaySpeed, MyFileUtils.MP3_FILE_SUFFIX, new ResultCallback<String>() {
|
|
|
@Override
|
|
|
public void onSuccess(String s) {
|
|
@@ -1048,7 +1225,6 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
@Override
|
|
|
public void run() {
|
|
|
preparePlay();
|
|
|
- hideLoading();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -1061,7 +1237,8 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
runOnUiThread(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
- updateLoadingText("伴奏下载中" + progressPercent + "%");
|
|
|
+// updateLoadingText("伴奏下载中" + progressPercent + "%");
|
|
|
+ updateLoadingText(getString(R.string.mh_loading_str));
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -1136,6 +1313,13 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
checkTipToFinish();
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+ if (id == com.cooleshow.base.R.id.tv_cancel_loading) {
|
|
|
+ //取消loading,关闭页面
|
|
|
+ hideLoading();
|
|
|
+ finish();
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void resumePlay() {
|
|
@@ -1178,7 +1362,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
|
|
|
private void checkTipToFinish() {
|
|
|
boolean hasUpdate = mViewModel.isHasUpdate();
|
|
|
- if (hasUpdate) {
|
|
|
+ if (hasUpdate || !hasWorks) {
|
|
|
showSaveTipDialog();
|
|
|
} else {
|
|
|
finish();
|
|
@@ -1190,6 +1374,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
CommonConfirmDialog2 commonConfirmDialog = new CommonConfirmDialog2(this);
|
|
|
commonConfirmDialog.setWidth(SizeUtils.dp2px(387));
|
|
|
commonConfirmDialog.show();
|
|
|
+ commonConfirmDialog.setIsCanCel(false);
|
|
|
commonConfirmDialog.setTitle("提示");
|
|
|
commonConfirmDialog.setContent("是否将本次录制的作品保存为草稿?");
|
|
|
commonConfirmDialog.setOnConfirmClickListener(new View.OnClickListener() {
|
|
@@ -1209,6 +1394,30 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ private void showRetryRecordTip() {
|
|
|
+ pausePlay();
|
|
|
+ CommonConfirmDialog2 retryTipDialog = new CommonConfirmDialog2(this);
|
|
|
+ retryTipDialog.setWidth(SizeUtils.dp2px(350));
|
|
|
+ retryTipDialog.show();
|
|
|
+ retryTipDialog.setIsCanCel(false);
|
|
|
+ retryTipDialog.setTitle("温馨提示");
|
|
|
+ retryTipDialog.setContent("是否重新录制作品?");
|
|
|
+ retryTipDialog.setOnConfirmClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ retryTipDialog.dismiss();
|
|
|
+ goRetryRecordToFinish();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ retryTipDialog.setOnCancelClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ retryTipDialog.dismiss();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 监听返回键
|
|
|
*
|
|
@@ -1231,9 +1440,11 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
if (visibility == View.VISIBLE) {
|
|
|
viewBinding.groupSetting.setVisibility(View.GONE);
|
|
|
viewBinding.ivUnfoldSentting.setVisibility(View.VISIBLE);
|
|
|
+ viewBinding.viewBgRightPoint.setVisibility(View.GONE);
|
|
|
} else {
|
|
|
viewBinding.groupSetting.setVisibility(View.VISIBLE);
|
|
|
viewBinding.ivUnfoldSentting.setVisibility(View.GONE);
|
|
|
+ viewBinding.viewBgRightPoint.setVisibility(View.VISIBLE);
|
|
|
}
|
|
|
|
|
|
mHandler.postDelayed(new Runnable() {
|
|
@@ -1249,10 +1460,12 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
viewBinding.ivPlayPointer.setRotation(0);
|
|
|
handleAnim(true);
|
|
|
viewBinding.ivPlay.setImageResource(isVideo ? R.drawable.icon_music_merge_pause_white : R.drawable.icon_music_merge_pause);
|
|
|
+ syncPlayStatusToH5(MHWebApi.API_PLAY);
|
|
|
} else {
|
|
|
handleAnim(false);
|
|
|
viewBinding.ivPlayPointer.setRotation(92);
|
|
|
viewBinding.ivPlay.setImageResource(isVideo ? R.drawable.icon_music_merge_play_white : R.drawable.icon_music_merge_play);
|
|
|
+ syncPlayStatusToH5(MHWebApi.API_PAUSED);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1261,6 +1474,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
if (isVideo) {
|
|
|
return;
|
|
|
}
|
|
|
+ viewBinding.musicFrequencyView.setVisibility(isPlay ? View.VISIBLE : View.GONE);
|
|
|
if (isPlay) {
|
|
|
viewBinding.musicFrequencyView.setMediaPlayer(getAudioPlayer().getAudioSessionId());
|
|
|
}
|
|
@@ -1329,6 +1543,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
bean.setTitle(getString(R.string.share_works_title));
|
|
|
bean.setDes(shareDes);
|
|
|
bean.setThumb(imgCover);
|
|
|
+ bean.setId(worksId);
|
|
|
return bean;
|
|
|
}
|
|
|
|
|
@@ -1350,6 +1565,15 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
public void toShare(ShareType shareType) {
|
|
|
goShare(intentBean, shareType);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void goLookDetail() {
|
|
|
+ //适配从云教练里面跳转的页面顺序,暂时这样吧
|
|
|
+ int pos = 4;
|
|
|
+ JumpUtils.jumpMain(pos);
|
|
|
+ goMyWorks(0);
|
|
|
+ WebStartHelper.startMyWorks(intentBean.getId());
|
|
|
+ }
|
|
|
});
|
|
|
shareDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
|
|
@Override
|
|
@@ -1385,6 +1609,13 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
finish();
|
|
|
}
|
|
|
|
|
|
+ private void goRetryRecordToFinish() {
|
|
|
+ Intent intent = new Intent();
|
|
|
+ intent.putExtra("saveWorksStatus", MusicMergeConfig.RETRY_EVALUATION);
|
|
|
+ setResult(RESULT_OK, intent);
|
|
|
+ finish();
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
public void getDetailSuccess(MusicDataBean data) {
|
|
@@ -1395,15 +1626,15 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
this.originalFileUrl = data.getVideoUrl();
|
|
|
String jsonConfig = data.getJsonConfig();
|
|
|
accompanyUrl = data.getAccompanyUrl();
|
|
|
+ boolean isVideo = MyFileUtils.isVideoFromUrl(data.getVideoUrl());
|
|
|
+ MusicMergeConfigBean musicMergeConfigBean = toApplyConfig(jsonConfig);
|
|
|
+ initMusicScoreFragment(data.getMusicSheetId(), musicMergeConfigBean.getMusicRenderType(), isVideo);
|
|
|
if (mSettingFragment != null) {
|
|
|
- if (!TextUtils.isEmpty(jsonConfig)) {
|
|
|
- toApplyConfig(jsonConfig);
|
|
|
- }
|
|
|
+ mSettingFragment.applyConfig(musicMergeConfigBean);
|
|
|
mSettingFragment.setAccompanyUrl(accompanyUrl, accompanyPlaySpeed);
|
|
|
}
|
|
|
//这里为了兼容IOS录制的wav音频文件格式不正确 导致合成失败的问题Failed to read frame size: Could not seek to 1026.
|
|
|
//取服务端存储的文件
|
|
|
- boolean isVideo = MyFileUtils.isVideoFromUrl(data.getVideoUrl());
|
|
|
String fileUrl = isVideo ? data.getVideoUrl() : data.getRecordFilePath();
|
|
|
boolean b = checkRecordFile(fileUrl);
|
|
|
if (b) {
|
|
@@ -1413,16 +1644,20 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void toApplyConfig(String jsonConfig) {
|
|
|
+ private MusicMergeConfigBean toApplyConfig(String jsonConfig) {
|
|
|
try {
|
|
|
MusicMergeConfigBean musicMergeConfigBean = GsonUtils.fromJson(jsonConfig, MusicMergeConfigBean.class);
|
|
|
defaultDelay = Math.abs(musicMergeConfigBean.getDefaultDelay());
|
|
|
evaluateDelay = Math.abs(musicMergeConfigBean.getEvaluateDelay());
|
|
|
mSettingFragment.applyConfig(musicMergeConfigBean);
|
|
|
accompanyPlaySpeed = musicMergeConfigBean.getSpeedRate();
|
|
|
+ this.musicRenderType = musicMergeConfigBean.getMusicRenderType();
|
|
|
+ this.partIndex=musicMergeConfigBean.getPartIndex();
|
|
|
+ return musicMergeConfigBean;
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
+ return MusicMergeConfigBean.createDefault();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -1430,6 +1665,7 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
if (!checkActivityExist()) {
|
|
|
return;
|
|
|
}
|
|
|
+ hasWorks = true;
|
|
|
currentStep = 1;
|
|
|
mViewModel.getUpdateEvent().setValue(false);
|
|
|
if (isNeedFinishPage) {
|
|
@@ -1457,8 +1693,9 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
CommonConfirmDialog2 commonConfirmDialog = new CommonConfirmDialog2(this);
|
|
|
commonConfirmDialog.setWidth(SizeUtils.dp2px(387));
|
|
|
commonConfirmDialog.show();
|
|
|
+ commonConfirmDialog.setIsCanCel(false);
|
|
|
commonConfirmDialog.setTitle("提示");
|
|
|
- commonConfirmDialog.setContent("已成功保存到草稿,草稿7天未发布\n将自动删除。");
|
|
|
+ commonConfirmDialog.setContent("已成功保存到草稿,草稿7天未发布将自动删除。");
|
|
|
commonConfirmDialog.setCancelText("确认");
|
|
|
commonConfirmDialog.setConfirmText("查看草稿");
|
|
|
commonConfirmDialog.setOnCancelClickListener(new View.OnClickListener() {
|
|
@@ -1473,15 +1710,15 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
commonConfirmDialog.dismiss();
|
|
|
//从首页个人中心跳转我的作品
|
|
|
JumpUtils.jumpMain(4);
|
|
|
- goMyWorks();
|
|
|
+ goMyWorks(1);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
- private void goMyWorks() {
|
|
|
+ private void goMyWorks(int pos) {
|
|
|
ARouter.getInstance().build(RouterPath.Homework.MY_WORK)
|
|
|
- .withInt(Constants.MAIN_PAGE_SELECT_POTION_KEY, 1)
|
|
|
+ .withInt(Constants.MAIN_PAGE_SELECT_POTION_KEY, pos)
|
|
|
.navigation();
|
|
|
finish();
|
|
|
}
|
|
@@ -1544,6 +1781,34 @@ public class MusicHandleActivity_ extends BaseMVPActivity<AcMusicHandleLayoutBin
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public void getDetailByRecordSuccess(MusicDataBean data) {
|
|
|
+ //是否有作品记录
|
|
|
+ if (data != null) {
|
|
|
+ hasWorks = true;
|
|
|
+ } else {
|
|
|
+ hasWorks = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void checkGuide() {
|
|
|
+ if (mSettingFragment != null) {
|
|
|
+ boolean canShowGuide = mSettingFragment.isCanShowGuide();
|
|
|
+ if (canShowGuide) {
|
|
|
+ hideLoading();
|
|
|
+ pausePlay();
|
|
|
+ if (viewBinding.flSetting.getVisibility() == View.GONE) {
|
|
|
+ handleSettingVisibility();
|
|
|
+ }
|
|
|
+ mSettingFragment.showGuide();
|
|
|
+ } else {
|
|
|
+ //不需要显示引导页
|
|
|
+ LOG.i("引导页无需显示,完成");
|
|
|
+ mViewModel.addHandleStep();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
|
|
super.onActivityResult(requestCode, resultCode, data);
|
|
|
UMShareAPI.get(MusicHandleActivity_.this).onActivityResult(requestCode, resultCode, data);
|