diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9b66005..22ac2c6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" - android:roundIcon="@mipmap/ic_launcher_round" + android:roundIcon="@mipmap/ic_launcher" android:supportsRtl="true" android:theme="@style/Theme.MusicApp" tools:targetApi="31"> diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterCategory.java b/app/src/main/java/com/hi/music/player/adapter/AdapterCategory.java index 882040e..8bae92e 100644 --- a/app/src/main/java/com/hi/music/player/adapter/AdapterCategory.java +++ b/app/src/main/java/com/hi/music/player/adapter/AdapterCategory.java @@ -55,7 +55,7 @@ public class AdapterCategory extends BaseAdapter() { @Override public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterCategoryList.java b/app/src/main/java/com/hi/music/player/adapter/AdapterCategoryList.java index 5906e51..683411f 100644 --- a/app/src/main/java/com/hi/music/player/adapter/AdapterCategoryList.java +++ b/app/src/main/java/com/hi/music/player/adapter/AdapterCategoryList.java @@ -71,7 +71,7 @@ public class AdapterCategoryList extends BaseAdapter() { @Override public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterPlayList.java b/app/src/main/java/com/hi/music/player/adapter/AdapterPlayList.java index 89ae6ca..2ee155d 100644 --- a/app/src/main/java/com/hi/music/player/adapter/AdapterPlayList.java +++ b/app/src/main/java/com/hi/music/player/adapter/AdapterPlayList.java @@ -90,7 +90,7 @@ public class AdapterPlayList extends BaseAdapter() { @Override public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { diff --git a/app/src/main/java/com/hi/music/player/dialog/DialogPlayList.java b/app/src/main/java/com/hi/music/player/dialog/DialogPlayList.java index 1424d9f..6ea1a25 100644 --- a/app/src/main/java/com/hi/music/player/dialog/DialogPlayList.java +++ b/app/src/main/java/com/hi/music/player/dialog/DialogPlayList.java @@ -57,7 +57,7 @@ public class DialogPlayList extends BaseDialog { .asDrawable() .apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(10)))) .load(artworkUri) - .placeholder(R.mipmap.ic_launcher) + .placeholder(R.drawable.placeholder) .listener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { diff --git a/app/src/main/java/com/hi/music/player/helper/MyValue.java b/app/src/main/java/com/hi/music/player/helper/MyValue.java index 0b611af..bd75fe4 100644 --- a/app/src/main/java/com/hi/music/player/helper/MyValue.java +++ b/app/src/main/java/com/hi/music/player/helper/MyValue.java @@ -57,12 +57,15 @@ public class MyValue { //暂停或者停止 public final static int PLAY_STATUS_CODE_PAUSE = -3; + //切歌 + public final static int PLAY_STATUS_CHANGE_MUSIC= -4; /** * 进入播放页面的来源 - * 0--单曲进入、 1--音乐分类合集列表进入 2--视频mv进入 + * 0--首页单曲进入、 1--首页音乐分类合集列表进入 2--首页单个视频mv进入 + * 3--控制面板进入 */ public static String KEY_ENTER_SOURCE = "ENTER_SOURCE"; @@ -73,6 +76,9 @@ public class MyValue { public final static int TYPE_ENTER_SOURCE_MV = 2; + public final static int TYPE_ENTER_PANEL = 3; + + //-----------------------------PlayActivity diff --git a/app/src/main/java/com/hi/music/player/media3/MyMediaControllerManager.java b/app/src/main/java/com/hi/music/player/media3/MyMediaControllerManager.java index b9e9457..ad33560 100644 --- a/app/src/main/java/com/hi/music/player/media3/MyMediaControllerManager.java +++ b/app/src/main/java/com/hi/music/player/media3/MyMediaControllerManager.java @@ -97,6 +97,7 @@ public class MyMediaControllerManager { return; } mListener.onChangeMusic(mediaItem); + mVmApplication.setPlayStatus(MyValue.PLAY_STATUS_CHANGE_MUSIC); } @Override @@ -165,12 +166,46 @@ public class MyMediaControllerManager { if (mediaController == null) return 0; return mediaController.getBufferedPosition(); } - - + public MediaItem getCurMediaItem() { + return mediaController.getCurrentMediaItem(); + } + public Boolean getIsPlaying() { + return mediaController.isPlaying(); + } public int getCurIndex() { return mediaController.getCurrentMediaItemIndex(); } + /** + * //0 不循环、1 列表循环、2 单曲循环、 + * @param mode + */ + public void setMode(int mode){ + switch (mode){ + case 0: + mediaController.setRepeatMode(Player.REPEAT_MODE_OFF); + break; + case 1: + mediaController.setRepeatMode(Player.REPEAT_MODE_ALL); + break; + case 2: + mediaController.setRepeatMode(Player.REPEAT_MODE_ONE); + break; + } + + } + + public String getCurVideoId() { + MediaItem currentMediaItem = mediaController.getCurrentMediaItem(); + if(currentMediaItem!= null){ + return currentMediaItem.mediaId; + }else { + return null; + } + + + } + /** * 更新播放列表中的音频url * @@ -275,9 +310,9 @@ public class MyMediaControllerManager { ResponsePlayListInfo playInfo = listInfo.get(i); MediaItem.Builder builder = new MediaItem.Builder(); - + String videoId = playInfo.getVideoId(); //唯一标识符 - builder.setMediaId(playInfo.getVideoId()); + builder.setMediaId(videoId); builder.setUri("-------test-----"); MediaMetadata.Builder MediaMetadata_builder = new MediaMetadata.Builder(); @@ -288,7 +323,7 @@ public class MyMediaControllerManager { MediaMetadata_builder.setArtworkUri(Uri.parse(playInfo.getCovert())); MediaMetadata_builder.setTitle(playInfo.getSongTitle()); - CommonUtils.LogMsg("----------添加播放列表 i=" + i + "---" + playInfo.getSingerName() + "-------VideoId=" + playInfo.getVideoId()); + CommonUtils.LogMsg("----------添加播放列表 i=" + i + "---" + playInfo.getSingerName() + "-------VideoId=" + videoId); // MediaMetadata_builder.setRecordingYear(Integer.parseInt(playInfo.getYear())); builder.setMediaMetadata(MediaMetadata_builder.build()); mediaController.addMediaItem(builder.build()); @@ -302,7 +337,6 @@ public class MyMediaControllerManager { CommonUtils.LogMsg("-----------prepare"); mediaController.prepare(); mediaController.play(); - } } @@ -342,8 +376,8 @@ public class MyMediaControllerManager { public void playPrevious() { if (mediaController.hasPreviousMediaItem()) { - int nextMediaItemIndex = mediaController.getNextMediaItemIndex(); - onCallRequestUrl(nextMediaItemIndex, true, new OnHasUrlAction() { + int previousMediaItemIndex = mediaController.getPreviousMediaItemIndex(); + onCallRequestUrl(previousMediaItemIndex, true, new OnHasUrlAction() { @Override public void onHasUrl() { mediaController.seekToPreviousMediaItem(); @@ -375,7 +409,7 @@ public class MyMediaControllerManager { @Override public void onHasUrl() { mediaController.play(); - CommonUtils.LogMsg("-------------有有效URl--播放指定播放列表位置的歌曲"); + CommonUtils.LogMsg("-------------有有效URl--播放指定播放列表位置的歌曲 index="+index); } }); diff --git a/app/src/main/java/com/hi/music/player/network/JsonHelper.java b/app/src/main/java/com/hi/music/player/network/JsonHelper.java index 7b11cf5..d21b6eb 100644 --- a/app/src/main/java/com/hi/music/player/network/JsonHelper.java +++ b/app/src/main/java/com/hi/music/player/network/JsonHelper.java @@ -125,6 +125,10 @@ public class JsonHelper { responsePlayListInfo.setDuration(SongDuration); responsePlayListInfo.setDurationMs(ms); responsePlayListInfo.setVideoId(watchEndPoint[0]); + if (watchEndPoint[0] == null || watchEndPoint[0].isEmpty()) { + CommonUtils.LogMsg("----------songName=" + songName + "---setVideoId=null"); + continue; + } responsePlayListInfo.setPlaylistId(watchEndPoint[1]); responsePlayListInfo.setParams(watchEndPoint[2]); responsePlayListInfo.setMusicVideoType(watchEndPoint[3]); @@ -203,7 +207,7 @@ public class JsonHelper { * @param jsonObject * @return */ - public static ResponseCategoryList ResolveCategoryList(JSONObject jsonObject,String browseId) { + public static ResponseCategoryList ResolveCategoryList(JSONObject jsonObject, String browseId) { try { ResponseCategoryList responseCategoryList = new ResponseCategoryList(); JSONObject contents = jsonObject.getJSONObject("contents"); @@ -276,10 +280,14 @@ public class JsonHelper { CommonUtils.LogMsg("----图片-------------thumbnail=" + thumbnail); child.setSmallCovert(thumbnail); // child.setCovert(thumbnail); + + + if (child.getVideoId() == null || child.getVideoId().isEmpty()) { + CommonUtils.LogErrorMsg("--歌曲" + i + "-------------SongTitle=" + child.getSongTitle() + "--getVideoId=" + child.getVideoId() + "---请求参数browseId=" + browseId); + continue; + } mList.add(child); - if (child.getVideoId() == null || child.getVideoId().isEmpty()) - CommonUtils.LogErrorMsg("--歌曲" + i + "-------------SongTitle=" + child.getSongTitle() + "--getVideoId=" + child.getVideoId()+"---请求参数browseId="+browseId); } } @@ -292,6 +300,9 @@ public class JsonHelper { ResponsePlayListInfo child = getCommonCategoryList(arrayJSONObject); child.setCovert(covert); child.setSmallCovert(covert); + if (child.getVideoId() == null || child.getVideoId().isEmpty()) { + continue; + } mList.add(child); } @@ -342,6 +353,10 @@ public class JsonHelper { String[] watchEndPoint = getWatchEndPoint(runs); listInfo.setVideoId(watchEndPoint[0]); + if (watchEndPoint[0] == null || watchEndPoint[0].isEmpty()) { + CommonUtils.LogMsg("---------getCommonCategoryList-SongTitle=" + SongTitle + "---setVideoId=null"); + } + listInfo.setPlaylistId(watchEndPoint[1]); listInfo.setParams(watchEndPoint[2]); listInfo.setMusicVideoType(watchEndPoint[3]); @@ -588,9 +603,13 @@ public class JsonHelper { int index = 0; if (maxBig) { index = length - 1; + }else if(length>2){ + index = length - 2; } String pngUrl = jsonArray.getJSONObject(index).getString("url"); + CommonUtils.LogMsg("----------取封面index="+index); + return pngUrl; } catch (JSONException exception) { return null; diff --git a/app/src/main/java/com/hi/music/player/ui/activity/BaseActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/BaseActivity.java index 6c572f4..ec840b1 100644 --- a/app/src/main/java/com/hi/music/player/ui/activity/BaseActivity.java +++ b/app/src/main/java/com/hi/music/player/ui/activity/BaseActivity.java @@ -2,6 +2,8 @@ package com.hi.music.player.ui.activity; import static android.view.Gravity.CENTER_HORIZONTAL; +import android.content.Context; +import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.Gravity; @@ -48,6 +50,8 @@ public abstract class BaseActivity extends AppCompatActiv protected VMApplication vmApplication; protected MyMediaControllerManager mediaControllerManager; + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -86,6 +90,8 @@ public abstract class BaseActivity extends AppCompatActiv public abstract boolean showPanel(); + + private void initPanel() { LayoutPanelBinding panelVb = LayoutPanelBinding.inflate(getLayoutInflater()); View panelView = panelVb.getRoot(); @@ -105,6 +111,14 @@ public abstract class BaseActivity extends AppCompatActiv } }); + panelVb.layoutPanel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MusicApplication.myApplication, PlayActivity.class); + intent.putExtra(MyValue.KEY_ENTER_SOURCE, MyValue.TYPE_ENTER_PANEL); + startActivity(intent); + } + }); if (this instanceof HomeActivity) { layoutParams.setMargins(CommonUtils.dpToPx(22), 0, CommonUtils.dpToPx(22), CommonUtils.dpToPx(82)); @@ -116,7 +130,7 @@ public abstract class BaseActivity extends AppCompatActiv vmApplication.playStatus.observe(this, new Observer() { @Override public void onChanged(Integer integer) { - CommonUtils.LogMsg("----------播放状态更新=" + integer); + CommonUtils.LogMsg("----------面板 播放状态更新=" + integer); if (panelView.getParent() == null) { CommonUtils.LogMsg("----------显示面板"); rootVb.frameLayout.addView(panelView, layoutParams); @@ -140,30 +154,21 @@ public abstract class BaseActivity extends AppCompatActiv switch (integer) { case Player.STATE_IDLE: - panelVb.imPlay.setSelected(false); - break; - case Player.STATE_BUFFERING: - //快进没有缓冲的时候触发 - panelVb.imPlay.setSelected(false); - break; - case Player.STATE_READY: - panelVb.imPlay.setSelected(false); - break; case Player.STATE_ENDED: - //播放完成 - panelVb.imPlay.setSelected(false); - break; - + case Player.STATE_READY: + case MyValue.PLAY_STATUS_CHANGE_MUSIC: case MyValue.PLAY_STATUS_CODE_PAUSE: + case Player.STATE_BUFFERING: + case MyValue.PLAY_STATUS_CODE_ERROR: + + //快进没有缓冲的时候触发 + //播放完成 panelVb.imPlay.setSelected(false); break; case MyValue.PLAY_STATUS_CODE_PLAYING: panelVb.imPlay.setSelected(true); break; - case MyValue.PLAY_STATUS_CODE_ERROR: - panelVb.imPlay.setSelected(false); - break; } diff --git a/app/src/main/java/com/hi/music/player/ui/activity/CategoryListActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/CategoryListActivity.java index d67274b..5dc58af 100644 --- a/app/src/main/java/com/hi/music/player/ui/activity/CategoryListActivity.java +++ b/app/src/main/java/com/hi/music/player/ui/activity/CategoryListActivity.java @@ -10,6 +10,7 @@ import androidx.lifecycle.Observer; import androidx.media3.common.util.UnstableApi; import androidx.recyclerview.widget.LinearLayoutManager; +import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; @@ -136,6 +137,7 @@ public class CategoryListActivity extends BaseActivity() { @Override public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { @@ -222,6 +224,8 @@ public class CategoryListActivity extends BaseActivity { } } + + private void updateTabIcon(TabLayout.Tab tab, boolean isSelected) { HomeTabCustomBinding tabBinding = HomeTabCustomBinding.bind(tab.getCustomView()); int position = tab.getPosition(); diff --git a/app/src/main/java/com/hi/music/player/ui/activity/PlayActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/PlayActivity.java index 496dd91..394529e 100644 --- a/app/src/main/java/com/hi/music/player/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/hi/music/player/ui/activity/PlayActivity.java @@ -76,7 +76,7 @@ public class PlayActivity extends BaseActivity implements S private GradientDrawable gradientDrawable; private int lighterColor, darkerColor; - // 0 播放列表请求失败 1 立即播放的歌曲请求失败 + // 0 播放列表请求失败 1 立即播放的歌曲请求失败 2 封面图加载失败 private int netError = 0; @@ -91,6 +91,16 @@ public class PlayActivity extends BaseActivity implements S private int mDefaultPlayStartIndex = 0; + + private int[] imageStates = { + R.drawable.icon_looper_no, + R.drawable.icon_looper, + R.drawable.icon_looper_1 + }; + + //0 不循环、1 列表循环、2 单曲循环、 + private int currentMode = 0; + @Override protected ActivityPlayBinding getViewBinding() { return ActivityPlayBinding.inflate(getLayoutInflater()); @@ -105,9 +115,13 @@ public class PlayActivity extends BaseActivity implements S Intent intent = getIntent(); mEnterType = intent.getIntExtra(MyValue.KEY_ENTER_SOURCE, MyValue.TYPE_ENTER_SOURCE_SINGLE); + initPlayerView(); + initProgressHandler(); switch (mEnterType) { case MyValue.TYPE_ENTER_SOURCE_SINGLE: + // 0--首页单曲进入 + updateMediaPlayList(); responseSingle = (ResponseSingle) intent.getSerializableExtra(MyValue.KEY_PLAY_ACTIVITY_SINGER); playlistId = responseSingle.getPlaylistId(); videoId = responseSingle.getVideoId(); @@ -122,6 +136,9 @@ public class PlayActivity extends BaseActivity implements S }); break; case MyValue.TYPE_ENTER_SOURCE_CATEGORY: + // 1--首页音乐分类合集列表进入 + + updateMediaPlayList(); ResponsePlayListInfo playListInfo = (ResponsePlayListInfo) intent.getSerializableExtra(MyValue.KEY_PLAY_ACTIVITY_CATEGORY_LIST); mDefaultPlayStartIndex = intent.getIntExtra(MyValue.KEY_PLAY_ACTIVITY_CATEGORY_LIST_INDEX, mDefaultPlayStartIndex); videoId = playListInfo.getVideoId(); @@ -129,6 +146,9 @@ public class PlayActivity extends BaseActivity implements S break; case MyValue.TYPE_ENTER_SOURCE_MV: + // 2--首页单个视频mv进入 + + updateMediaPlayList(); ResponseCategory responseCategory = (ResponseCategory) intent.getSerializableExtra(MyValue.KEY_PLAY_ACTIVITY_MV); videoId = responseCategory.getVideoId(); playlistId = responseCategory.getPlayListId(); @@ -141,33 +161,20 @@ public class PlayActivity extends BaseActivity implements S vmApplication.reSetPlayList(listInfos); } }); + + break; + + case MyValue.TYPE_ENTER_PANEL: + // 3--控制面板进入 + MediaItem curMediaItem = mediaControllerManager.getCurMediaItem(); + loadInfo(curMediaItem); + mHandler.post(mRunnable); + vb.progressBarLoading.setVisibility(View.GONE); + vb.btnPlay.setSelected(mediaControllerManager.getIsPlaying()); break; } - initPlayerView(); - initProgressHandler(); - - vmApplication.playList.observe(this, new Observer>() { - @Override - public void onChanged(List playList) { - if (playList == null) { - CommonUtils.LogErrorMsg("--------更新-playList null"); - netError = 0; - vb.linearRetry.setVisibility(View.VISIBLE); - return; - } - CommonUtils.LogMsg("--------更新-playList " + playList.size() + "--videoId=" + videoId); - if (playList.size() > 0) { - vb.linearRetry.setVisibility(View.GONE); - mPlayList = playList; - musicInfo = playList.get(0); - setPlayListAndGetUrl(playList, videoId, mDefaultPlayStartIndex); - } - - } - }); - vmPlay.playUrlLiveData.observe(this, new Observer() { @Override public void onChanged(CustomerUrlInfo customerUrlInfo) { @@ -195,6 +202,28 @@ public class PlayActivity extends BaseActivity implements S } + private void updateMediaPlayList() { + vmApplication.playList.observe(this, new Observer>() { + @Override + public void onChanged(List playList) { + if (playList == null) { + CommonUtils.LogErrorMsg("--------更新-playList null"); + netError = 0; + vb.linearRetry.setVisibility(View.VISIBLE); + return; + } + CommonUtils.LogMsg("--------更新-playList " + playList.size() + "--videoId=" + videoId); + if (playList.size() > 0) { + vb.linearRetry.setVisibility(View.GONE); + mPlayList = playList; + musicInfo = playList.get(0); + setPlayListAndGetUrl(playList, videoId, mDefaultPlayStartIndex); + } + + } + }); + } + /** * 设置播放列表,并请求当前需要播放的音乐url * @@ -203,6 +232,7 @@ public class PlayActivity extends BaseActivity implements S * @param index */ private void setPlayListAndGetUrl(List list, String id, int index) { + mediaControllerManager.resetPlayList(); MyMediaControllerManager.getInstance().setPlayList(list); vmPlay.getPlayUrl(id, index, true); } @@ -223,13 +253,13 @@ public class PlayActivity extends BaseActivity implements S // TODO: 2024/9/27 正在播放当前歌曲,又点进来 // mediaControllerManager.getMediaController().seekTo(0); // } - if (mediaControllerManager.getMediaController().isPlaying()) { - mediaControllerManager.stop(); - } - mediaControllerManager.resetPlayList(); +// if (mediaControllerManager.getMediaController().isPlaying()) { +// mediaControllerManager.stop(); +// } +// mediaControllerManager.resetPlayList(); } - - mediaControllerManager.addListener(vmApplication,new MediaControllerListener() { + mediaControllerManager.setMode(currentMode); + mediaControllerManager.addListener(vmApplication, new MediaControllerListener() { @Override public void onPlayStatus(int playStatus) { @@ -264,8 +294,10 @@ public class PlayActivity extends BaseActivity implements S vb.layoutPlayList.imPlay.setSelected(false); break; case MyValue.PLAY_STATUS_CODE_PLAYING: + CommonUtils.LogMsg("------------- 播放ing getCurIndex=" + mediaControllerManager.getCurIndex()); vb.progressBarLoading.setVisibility(View.GONE); + vb.linearRetry.setVisibility(View.GONE); vb.btnPlay.setSelected(true); vb.layoutPlayList.imPlay.setSelected(true); break; @@ -273,6 +305,8 @@ public class PlayActivity extends BaseActivity implements S vb.progressBarLoading.setVisibility(View.GONE); int currentMediaItemIndex = mediaControllerManager.getMediaController().getCurrentMediaItemIndex(); CommonUtils.LogMsg("------------- 播放错误 currentMediaItemIndex=" + currentMediaItemIndex); + mediaControllerManager.playPositionMusic(currentMediaItemIndex); + // TODO: 2024/10/16 break; } @@ -305,6 +339,7 @@ public class PlayActivity extends BaseActivity implements S vb.imBack.setOnClickListener(this); vb.btnMusicList.setOnClickListener(this); vb.tvRetry.setOnClickListener(this); + vb.btnLoop.setOnClickListener(this); } @@ -365,11 +400,13 @@ public class PlayActivity extends BaseActivity implements S .asDrawable() .apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(16)))) .load(url) - .placeholder(R.mipmap.ic_launcher) + .placeholder(R.drawable.placeholder) .listener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { CommonUtils.LogMsg(e.getMessage()); + netError = 2; + vb.linearRetry.setVisibility(View.VISIBLE); return false; } @@ -464,19 +501,40 @@ public class PlayActivity extends BaseActivity implements S } else if (v.equals(vb.tvRetry)) { //重试按钮 vb.linearRetry.setVisibility(View.GONE); - if (netError == 0) { - switch (mEnterType) { - case MyValue.TYPE_ENTER_SOURCE_SINGLE: - vmPlay.getPlayMusicList(playlistId, videoId, params, musicVideoType); - break; - } + switch (netError){ + case 0: + switch (mEnterType) { + case MyValue.TYPE_ENTER_SOURCE_SINGLE: + vmPlay.getPlayMusicList(playlistId, videoId, params, musicVideoType); + break; + } + break; + case 1: + int curIndex = mediaControllerManager.getCurIndex(); + + String curVideoId = mediaControllerManager.getCurVideoId(); + + String videoId1 = mCustomerUrlInfo.getVideoId(); + int playMusicIndex = mCustomerUrlInfo.getPlayMusicIndex(); + + CommonUtils.LogMsg("-------重试 curIndex=" + curIndex + "----curVideoId=" + curVideoId + "---videoId1=" + videoId1 + "---playMusicIndex=" + playMusicIndex); - } else { - if (mCustomerUrlInfo != null) { vmPlay.getPlayUrl(mCustomerUrlInfo.getVideoId(), mCustomerUrlInfo.getPlayMusicIndex(), true); - } - + break; + case 2: + MediaItem curMediaItem = mediaControllerManager.getCurMediaItem(); + MediaMetadata mediaMetadata = curMediaItem.mediaMetadata; + if (mediaMetadata.artworkUri != null) { + loadCovert(mediaMetadata.artworkUri.toString()); + } + break; } + + } else if (v.equals(vb.btnLoop)) { + currentMode = (currentMode + 1) % imageStates.length; + vb.btnLoop.setImageResource(imageStates[currentMode]); + CommonUtils.LogMsg("----currentMode=" + currentMode); + mediaControllerManager.setMode(currentMode); } } @@ -499,6 +557,7 @@ public class PlayActivity extends BaseActivity implements S adapterPlayList = new AdapterPlayList(); vb.layoutPlayList.recyclerList.setLayoutManager(new LinearLayoutManager(MusicApplication.myApplication)); adapterPlayList.setData(playList); + // TODO: 2024/10/16 vb.layoutPlayList.recyclerList.setAdapter(adapterPlayList); vb.layoutPlayList.imPlay.setOnClickListener(this); initPlayList = true; @@ -537,7 +596,7 @@ public class PlayActivity extends BaseActivity implements S .asDrawable() .apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(10)))) .load(artworkUri) - .placeholder(R.mipmap.ic_launcher) + .placeholder(R.drawable.placeholder) .listener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { diff --git a/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMPlay.java b/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMPlay.java index 7d3b6bc..29fddc4 100644 --- a/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMPlay.java +++ b/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMPlay.java @@ -59,11 +59,12 @@ public class VMPlay extends ViewModel { CustomerUrlInfo customerUrlInfo = new CustomerUrlInfo(); customerUrlInfo.setNeedPlayNow(playNow); customerUrlInfo.setVideoId(videoId); + customerUrlInfo.setPlayMusicIndex(playListIndex); RetrofitManager.getInstance().getPlayUrl(videoId, new RequestListener() { @Override public void onFail(String errorMsg) { - CommonUtils.LogMsg("-------------此次网络请求失败 playNow="+playNow); + CommonUtils.LogMsg("-------------此次网络请求失败 playNow="+playNow +"--playListIndex="+playListIndex); _playUrlMutableLiveData.setValue(customerUrlInfo); } @@ -79,7 +80,6 @@ public class VMPlay extends ViewModel { MyMediaControllerManager.getInstance().UpdateAudioUrl(responsePlayUrl,playListIndex); // MyMediaControllerManager.getInstance().addMusicToPlayList(responsePlayUrl,playListIndex); customerUrlInfo.setPlayUrl(responsePlayUrl); - customerUrlInfo.setPlayMusicIndex(playListIndex); } _playUrlMutableLiveData.setValue(customerUrlInfo); diff --git a/app/src/main/res/drawable/bg_retry.xml b/app/src/main/res/drawable/bg_retry.xml index 137718f..0c70c3b 100644 --- a/app/src/main/res/drawable/bg_retry.xml +++ b/app/src/main/res/drawable/bg_retry.xml @@ -2,6 +2,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_retry_btn.xml b/app/src/main/res/drawable/bg_retry_btn.xml new file mode 100644 index 0000000..ce1bcf4 --- /dev/null +++ b/app/src/main/res/drawable/bg_retry_btn.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_looper.xml b/app/src/main/res/drawable/icon_looper.xml new file mode 100644 index 0000000..327283d --- /dev/null +++ b/app/src/main/res/drawable/icon_looper.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/drawable/icon_looper_1.xml b/app/src/main/res/drawable/icon_looper_1.xml new file mode 100644 index 0000000..0563c0a --- /dev/null +++ b/app/src/main/res/drawable/icon_looper_1.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/src/main/res/drawable/icon_looper_no.xml b/app/src/main/res/drawable/icon_looper_no.xml new file mode 100644 index 0000000..7a7585b --- /dev/null +++ b/app/src/main/res/drawable/icon_looper_no.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/drawable/icon_random.xml b/app/src/main/res/drawable/icon_random.xml new file mode 100644 index 0000000..c376105 --- /dev/null +++ b/app/src/main/res/drawable/icon_random.xml @@ -0,0 +1,32 @@ + + + + + + diff --git a/app/src/main/res/drawable/placeholder.xml b/app/src/main/res/drawable/placeholder.xml new file mode 100644 index 0000000..670dfcf --- /dev/null +++ b/app/src/main/res/drawable/placeholder.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_category_list.xml b/app/src/main/res/layout/activity_category_list.xml index faccf51..daefa6f 100644 --- a/app/src/main/res/layout/activity_category_list.xml +++ b/app/src/main/res/layout/activity_category_list.xml @@ -45,12 +45,11 @@ android:layout_height="wrap_content" android:layout_below="@id/imCovert" android:layout_centerHorizontal="true" - android:layout_marginTop="10dp" - android:gravity="center" android:layout_marginStart="20dp" + android:layout_marginTop="10dp" android:layout_marginEnd="20dp" + android:gravity="center" android:textColor="@color/white" - android:text="@string/app_name" android:textSize="21sp" /> @@ -76,7 +74,6 @@ android:layout_marginTop="5dp" android:layout_marginStart="20dp" android:layout_marginEnd="20dp" - android:text="@string/app_name" android:gravity="center" android:textColor="@color/white" android:textSize="14sp" /> @@ -88,6 +85,7 @@ android:layout_below="@id/tvSubTitle" android:layout_centerHorizontal="true" android:layout_marginTop="15dp" + android:visibility="invisible" android:src="@drawable/selector_icon_play" /> diff --git a/app/src/main/res/layout/activity_play.xml b/app/src/main/res/layout/activity_play.xml index 8363284..29eef9c 100644 --- a/app/src/main/res/layout/activity_play.xml +++ b/app/src/main/res/layout/activity_play.xml @@ -32,40 +32,44 @@ android:layout_marginTop="30dp" android:layout_marginEnd="40dp" android:scaleType="fitCenter" - android:src="@mipmap/ic_launcher" + android:src="@drawable/placeholder" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/im_back" /> - + android:textColor="@color/white" + android:textSize="18sp" /> @@ -89,12 +93,12 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="25dp" - android:text="9999999999999999999999999999999999999999" + android:layout_marginEnd="40dp" + android:text="" android:textColor="@color/text_color_1" android:textSize="19sp" - android:layout_marginEnd="40dp" - app:layout_constraintRight_toRightOf="parent" app:layout_constraintLeft_toLeftOf="@id/im_covert" + app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/im_covert" /> + + + + android:src="@drawable/placeholder" /> + android:src="@drawable/placeholder" /> + android:src="@drawable/placeholder" /> + android:src="@drawable/placeholder" /> + android:src="@drawable/placeholder" /> #4DFFFFFF #FF424242 #80F988 + #E03D3D3F #99000000 - + #000000 #2D9C31 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5f6ae07..4f92588 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,6 +22,6 @@ Privacy Policy Terms of Service Play next - Retry + Try again An error occurred \ No newline at end of file