diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7ebcd5a..9b66005 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,18 +39,18 @@
android:name=".ui.activity.A_HomeActivity"
android:exported="true"
android:screenOrientation="portrait">
+
+
+
-
-
+
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 e5d62e3..5906e51 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
@@ -24,12 +24,20 @@ import com.hi.music.player.api.onImageColorListener;
import com.hi.music.player.databinding.ItemCategoryListBinding;
import com.hi.music.player.databinding.ItemSingerBinding;
import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.child.ResponseCategoryListChild;
import com.hi.music.player.javabean.response.child.ResponseSingle;
public class AdapterCategoryList extends BaseAdapter {
+
+ private String mPageType;
+
+ public void setPageType(String mPageType) {
+ this.mPageType = mPageType;
+ }
+
@Override
protected ItemCategoryListBinding getViewBinding(ViewGroup parent) {
return ItemCategoryListBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
@@ -42,43 +50,48 @@ public class AdapterCategoryList extends BaseAdapter() {
- @Override
- public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) {
- CommonUtils.LogMsg(e.getMessage());
- return false;
- }
+ vb.image.setVisibility(View.VISIBLE);
+ vb.tvPosition.setVisibility(View.GONE);
- @OptIn(markerClass = UnstableApi.class)
- @Override
- public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) {
- return false;
- }
- })
- .into(vb.image);
+ Glide.with(MusicApplication.myApplication)
+ .asDrawable()
+ .apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(16))))
+ .load(child.getSmallCovert())
+ .placeholder(R.mipmap.ic_launcher)
+ .listener(new RequestListener() {
+ @Override
+ public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) {
+ CommonUtils.LogMsg(e.getMessage());
+ return false;
+ }
+
+ @OptIn(markerClass = UnstableApi.class)
+ @Override
+ public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) {
+ return false;
+ }
+ })
+ .into(vb.image);
+ break;
}
-
-
vb.getRoot().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- homeItemClickListener.onClickItemCategoryList(child,itemHolder.getAbsoluteAdapterPosition());
+ homeItemClickListener.onClickItemCategoryList(child, itemHolder.getAbsoluteAdapterPosition());
}
});
}
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 2cd796a..89ae6ca 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
@@ -18,6 +18,7 @@ import com.hi.music.player.R;
import com.hi.music.player.api.MediaControllerListener;
import com.hi.music.player.databinding.ItemPlayListBinding;
import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.media3.MyMediaControllerManager;
@@ -75,14 +76,22 @@ public class AdapterPlayList extends BaseAdapter itemHolder = (VHolder) holder;
ItemPlayListBinding vb = itemHolder.getVb();
+
+ vb.songName.setText(listInfo.getSongTitle());
+ String singerName = listInfo.getSingerName();
+ String describe = listInfo.getDescribe();
+ if(singerName!= null&&!singerName.isEmpty()){
+ vb.artistName.setText(singerName);
+ }else if(describe!= null&&!describe.isEmpty()){
+ vb.artistName.setText(describe);
+ }
+ String covert = listInfo.getSmallCovert();
Glide.with(MusicApplication.myApplication)
.asDrawable()
.apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(10))))
- .load(listInfo.getSmallCovert())
+ .load(covert)
.placeholder(R.mipmap.ic_launcher)
.into(vb.imCovert);
- vb.songName.setText(listInfo.getSongTitle());
- vb.artistName.setText(listInfo.getSingerName());
MediaItem currentMediaItem = instance.getMediaController().getCurrentMediaItem();
if (currentMediaItem != null && currentMediaItem.mediaId.equals(listInfo.getVideoId())) {
diff --git a/app/src/main/java/com/hi/music/player/adapter/BaseAdapter.java b/app/src/main/java/com/hi/music/player/adapter/BaseAdapter.java
index bc54a56..df575bd 100644
--- a/app/src/main/java/com/hi/music/player/adapter/BaseAdapter.java
+++ b/app/src/main/java/com/hi/music/player/adapter/BaseAdapter.java
@@ -32,6 +32,10 @@ abstract public class BaseAdapter extends RecyclerView
this.homeItemClickListener = homeItemClickListener;
}
+ public boolean isLoadingAdded() {
+ return isLoadingAdded;
+ }
+
public void addData(List data) {
this.data.addAll(data);
notifyDataSetChanged();
@@ -46,7 +50,7 @@ abstract public class BaseAdapter extends RecyclerView
public void addLoadingFooter() {
isLoadingAdded = true;
-// notifyItemInserted(data.size());
+ notifyItemInserted(data.size());
}
// Hide loading footer
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 349ffc1..0b611af 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
@@ -2,9 +2,21 @@ package com.hi.music.player.helper;
public class MyValue {
- public static String PAGE_TYPE_MV="MUSIC_PAGE_TYPE_ARTIST";
- public static String PAGE_TYPE_LIST="MUSIC_PAGE_TYPE_PLAYLIST";
- public static String PAGE_TYPE_ALBUM="MUSIC_PAGE_TYPE_ALBUM";
+
+
+ //live合集
+ public static final String PAGE_TYPE_MV_LIST="MUSIC_PAGE_TYPE_USER_CHANNEL";
+
+
+ //个人live
+ public static final String PAGE_TYPE_MV="MUSIC_PAGE_TYPE_ARTIST";
+
+
+ //风格音乐合集:乡村音乐
+ public static final String PAGE_TYPE_LIST="MUSIC_PAGE_TYPE_PLAYLIST";
+
+ //专辑
+ public static final String PAGE_TYPE_ALBUM="MUSIC_PAGE_TYPE_ALBUM";
//-----------------------------PlayActivity
diff --git a/app/src/main/java/com/hi/music/player/javabean/requestbody/child/ContextBody.java b/app/src/main/java/com/hi/music/player/javabean/requestbody/child/ContextBody.java
index a1c02c0..0d2987a 100644
--- a/app/src/main/java/com/hi/music/player/javabean/requestbody/child/ContextBody.java
+++ b/app/src/main/java/com/hi/music/player/javabean/requestbody/child/ContextBody.java
@@ -25,6 +25,7 @@ public class ContextBody {
public static class Client implements Serializable {
private String clientName = "WEB_REMIX";
+ //1.20240506.01.00
private String clientVersion = "1.20220918";
private String hl = Locale.getDefault().getLanguage();
private String gl = "US";
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/ResponsePlayListInfo.java b/app/src/main/java/com/hi/music/player/javabean/response/ResponsePlayListInfo.java
index f15b184..561a5f5 100644
--- a/app/src/main/java/com/hi/music/player/javabean/response/ResponsePlayListInfo.java
+++ b/app/src/main/java/com/hi/music/player/javabean/response/ResponsePlayListInfo.java
@@ -1,5 +1,7 @@
package com.hi.music.player.javabean.response;
+import com.hi.music.player.helper.MyValue;
+
import java.io.Serializable;
/**
@@ -33,6 +35,8 @@ public class ResponsePlayListInfo implements Serializable {
//歌曲时长 毫秒
private long DurationMs;
+ private String describe;
+
private String videoId;
private String playlistId;
@@ -47,6 +51,20 @@ public class ResponsePlayListInfo implements Serializable {
// private String audioUrlMedium;
+
+
+
+
+
+
+ public String getDescribe() {
+ return describe;
+ }
+
+ public void setDescribe(String describe) {
+ this.describe = describe;
+ }
+
public String getSmallCovert() {
return smallCovert;
}
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseCategory.java b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseCategory.java
index 8acb93f..7b6bcef 100644
--- a/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseCategory.java
+++ b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseCategory.java
@@ -10,6 +10,10 @@ public class ResponseCategory implements Serializable {
private String twoTitle;
//类别描述
+ /**
+ * PAGE_TYPE_ALBUM : 专辑.歌手名字
+ * PAGE_TYPE_LIST :多个歌手名字
+ */
private String twoSubtitle;
@@ -25,9 +29,12 @@ public class ResponseCategory implements Serializable {
/**
- * 视频Mv
+ * 视频Mv合集
*MUSIC_PAGE_TYPE_USER_CHANNEL
*
+ * 视频Mv单个
+ * MUSIC_PAGE_TYPE_USER_CHANNEL
+ *
* 音乐合集列表
* MUSIC_PAGE_TYPE_PLAYLIST
*
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 ec3d358..b9e9457 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
@@ -24,6 +24,7 @@ import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.ResponsePlayUrl;
import com.hi.music.player.network.RetrofitManager;
+import com.hi.music.player.ui.activity.viewmodel.VMApplication;
import java.util.ArrayList;
import java.util.List;
@@ -37,6 +38,10 @@ public class MyMediaControllerManager {
private MediaControllerListener mListener;
+ private VMApplication mVmApplication;
+
+
+
//播放列表总数量
private List playList;
@@ -74,12 +79,14 @@ public class MyMediaControllerManager {
}
- public void addListener(MediaControllerListener listener) {
+ public void addListener(VMApplication vmApplication, MediaControllerListener listener) {
+ mVmApplication = vmApplication;
mListener = listener;
mediaController.addListener(new Player.Listener() {
@Override
public void onPlayerError(PlaybackException error) {
mListener.onPlayStatus(MyValue.PLAY_STATUS_CODE_ERROR);
+ mVmApplication.setPlayStatus(MyValue.PLAY_STATUS_CODE_ERROR);
}
@Override
@@ -97,36 +104,21 @@ public class MyMediaControllerManager {
if (isPlaying) {
mListener.onPlayStatus(MyValue.PLAY_STATUS_CODE_PLAYING);
- // TODO: 2024/9/26 自动播放完成切歌到下一首播放没有触发这里请求下一首
- if (mediaController.hasNextMediaItem()) {
- int nextMediaItemIndex = mediaController.getNextMediaItemIndex();
- onCallRequestUrl(nextMediaItemIndex, false, new OnHasUrlAction() {
- @Override
- public void onHasUrl() {
- CommonUtils.LogMsg("-------------有有效URl--播放检查下一首 位置=" + nextMediaItemIndex);
- }
- });
- }
- if (mediaController.hasPreviousMediaItem()) {
- int previousMediaItemIndex = mediaController.getPreviousMediaItemIndex();
- onCallRequestUrl(previousMediaItemIndex, false, new OnHasUrlAction() {
- @Override
- public void onHasUrl() {
- CommonUtils.LogMsg("-------------有有效URl--播放检查上一首 位置=" + previousMediaItemIndex);
- }
- });
- }
+ mVmApplication.setPlayStatus(MyValue.PLAY_STATUS_CODE_PLAYING);
+ // TODO: 2024/10/15 自动播放完成切歌到下一首播放没有触发这里请求下一首
+ checkUrl(false);
} else {
// 播放器暂停或停止
mListener.onPlayStatus(MyValue.PLAY_STATUS_CODE_PAUSE);
+ mVmApplication.setPlayStatus(MyValue.PLAY_STATUS_CODE_PAUSE);
}
}
@Override
public void onPlaybackStateChanged(int playbackState) {
mListener.onPlayStatus(playbackState);
-
+ mVmApplication.setPlayStatus(playbackState);
}
@Override
@@ -138,6 +130,27 @@ public class MyMediaControllerManager {
});
}
+ public void checkUrl(boolean playNextNow){
+ if (mediaController.hasNextMediaItem()) {
+ int nextMediaItemIndex = mediaController.getNextMediaItemIndex();
+ onCallRequestUrl(nextMediaItemIndex, playNextNow, new OnHasUrlAction() {
+ @Override
+ public void onHasUrl() {
+ CommonUtils.LogMsg("-------------有有效URl--播放检查下一首 位置=" + nextMediaItemIndex);
+ }
+ });
+ }
+ if (mediaController.hasPreviousMediaItem()) {
+ int previousMediaItemIndex = mediaController.getPreviousMediaItemIndex();
+ onCallRequestUrl(previousMediaItemIndex, false, new OnHasUrlAction() {
+ @Override
+ public void onHasUrl() {
+ CommonUtils.LogMsg("-------------有有效URl--播放检查上一首 位置=" + previousMediaItemIndex);
+ }
+ });
+ }
+ }
+
public MediaController getMediaController() {
return mediaController;
}
@@ -211,41 +224,41 @@ public class MyMediaControllerManager {
*
* @param playUrl
*/
- @OptIn(markerClass = UnstableApi.class)
- public void addMusicToPlayList(ResponsePlayUrl playUrl, int playListIndex) {
- if (playListIndex < playList.size() && playListIndex >= mediaController.getMediaItemCount()) {
- ResponsePlayListInfo listInfo = playList.get(playListIndex);
- if (listInfo.getVideoId().equals(playUrl.getVideoId())) {
- MediaItem.Builder builder = new MediaItem.Builder();
-
- //唯一标识符
- builder.setMediaId(playUrl.getVideoId());
- if (playUrl.getAudioUrlMedium() != null) {
- builder.setUri(playUrl.getAudioUrlMedium());
- } else {
- builder.setUri(playUrl.getAudioUrlLow());
- }
-
- MediaMetadata.Builder MediaMetadata_builder = new MediaMetadata.Builder();
-
- MediaMetadata_builder.setArtist(listInfo.getSingerName());
- /**
- * 这里使用setDescription保存歌曲时长的分秒字符串
- */
- MediaMetadata_builder.setDescription(listInfo.getDuration());
- MediaMetadata_builder.setDurationMs(listInfo.getDurationMs());
- MediaMetadata_builder.setArtworkUri(Uri.parse(listInfo.getCovert()));
-// MediaMetadata_builder.setArtworkUri(Uri.parse("https://t7.baidu.com/it/u=2604797219,1573897854&fm=193&f=GIF"));
- MediaMetadata_builder.setTitle(listInfo.getSongTitle());
-
- CommonUtils.LogMsg("----------添加到播放列表 i=" + playListIndex + "---" + listInfo.getSongTitle() + "-------VideoId=" + listInfo.getVideoId());
-// MediaMetadata_builder.setRecordingYear(Integer.parseInt(playInfo.getYear()));
- builder.setMediaMetadata(MediaMetadata_builder.build());
- mediaController.addMediaItem(builder.build());
-
- }
- }
- }
+// @OptIn(markerClass = UnstableApi.class)
+// public void addMusicToPlayList(ResponsePlayUrl playUrl, int playListIndex) {
+// if (playListIndex < playList.size() && playListIndex >= mediaController.getMediaItemCount()) {
+// ResponsePlayListInfo listInfo = playList.get(playListIndex);
+// if (listInfo.getVideoId().equals(playUrl.getVideoId())) {
+// MediaItem.Builder builder = new MediaItem.Builder();
+//
+// //唯一标识符
+// builder.setMediaId(playUrl.getVideoId());
+// if (playUrl.getAudioUrlMedium() != null) {
+// builder.setUri(playUrl.getAudioUrlMedium());
+// } else {
+// builder.setUri(playUrl.getAudioUrlLow());
+// }
+//
+// MediaMetadata.Builder MediaMetadata_builder = new MediaMetadata.Builder();
+//
+// MediaMetadata_builder.setArtist(listInfo.getSingerName());
+// /**
+// * 这里使用setDescription保存歌曲时长的分秒字符串
+// */
+// MediaMetadata_builder.setDescription(listInfo.getDuration());
+// MediaMetadata_builder.setDurationMs(listInfo.getDurationMs());
+// MediaMetadata_builder.setArtworkUri(Uri.parse(listInfo.getCovert()));
+//// MediaMetadata_builder.setArtworkUri(Uri.parse("https://t7.baidu.com/it/u=2604797219,1573897854&fm=193&f=GIF"));
+// MediaMetadata_builder.setTitle(listInfo.getSongTitle());
+//
+// CommonUtils.LogMsg("----------添加到播放列表 i=" + playListIndex + "---" + listInfo.getSongTitle() + "-------VideoId=" + listInfo.getVideoId());
+//// MediaMetadata_builder.setRecordingYear(Integer.parseInt(playInfo.getYear()));
+// builder.setMediaMetadata(MediaMetadata_builder.build());
+// mediaController.addMediaItem(builder.build());
+//
+// }
+// }
+// }
/**
* 添加播放列表(不带音频url)
@@ -271,11 +284,11 @@ public class MyMediaControllerManager {
MediaMetadata_builder.setArtist(playInfo.getSingerName());
MediaMetadata_builder.setDescription(playInfo.getDuration());
MediaMetadata_builder.setDurationMs(playInfo.getDurationMs());
- if (playInfo.getCovert() != null)
+ if (playInfo.getCovert() != null&&!playInfo.getCovert().isEmpty())
MediaMetadata_builder.setArtworkUri(Uri.parse(playInfo.getCovert()));
MediaMetadata_builder.setTitle(playInfo.getSongTitle());
- CommonUtils.LogMsg("----------添加播放列表 i=" + i + "---" + playInfo.getSongTitle() + "-------VideoId=" + playInfo.getVideoId());
+ CommonUtils.LogMsg("----------添加播放列表 i=" + i + "---" + playInfo.getSingerName() + "-------VideoId=" + playInfo.getVideoId());
// MediaMetadata_builder.setRecordingYear(Integer.parseInt(playInfo.getYear()));
builder.setMediaMetadata(MediaMetadata_builder.build());
mediaController.addMediaItem(builder.build());
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 611f841..7b11cf5 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
@@ -22,6 +22,7 @@ public class JsonHelper {
/**
* 解析首页单曲
+ *
* @param jsonObject
* @return
*/
@@ -54,6 +55,7 @@ public class JsonHelper {
/**
* 解析首页不同类型的音乐分类
+ *
* @param jsonObject
* @return
*/
@@ -79,6 +81,7 @@ public class JsonHelper {
/**
* 解析根据单曲获取的播放列表
+ *
* @param jsonObject
* @return
*/
@@ -97,6 +100,8 @@ public class JsonHelper {
String smallUrl = getCovertUrl(playlistPanelVideoRenderer, false);
+ CommonUtils.LogMsg("--图片--------maxUrl=" + maxUrl + "---smallUrl=" + smallUrl);
+
String songName = getJsonTitle(playlistPanelVideoRenderer.getJSONObject("title"), 0);
JSONObject longBylineText = playlistPanelVideoRenderer.getJSONObject("longBylineText");
@@ -136,8 +141,10 @@ public class JsonHelper {
}
return list;
}
+
/**
* 解析音乐音频源地址
+ *
* @param jsonObject
* @return
*/
@@ -191,100 +198,110 @@ public class JsonHelper {
/**
* 解析音乐分类合集列表
+ * MUSIC_PAGE_TYPE_ALBUM、MUSIC_PAGE_TYPE_PLAYLIST、MUSIC_PAGE_TYPE_USER_CHANNEL
+ *
* @param jsonObject
* @return
*/
- public static ResponseCategoryList ResolveCategoryList(JSONObject jsonObject) {
+ public static ResponseCategoryList ResolveCategoryList(JSONObject jsonObject,String browseId) {
try {
ResponseCategoryList responseCategoryList = new ResponseCategoryList();
- JSONObject jsonObject1 = jsonObject.getJSONObject("contents")
- .getJSONObject("twoColumnBrowseResultsRenderer");
- JSONObject musicResponsiveHeaderRenderer = jsonObject1
- .getJSONArray("tabs")
- .getJSONObject(0)
- .getJSONObject("tabRenderer")
- .getJSONObject("content")
- .getJSONObject("sectionListRenderer")
- .getJSONArray("contents")
- .getJSONObject(0)
- .getJSONObject("musicResponsiveHeaderRenderer");
-
- //封面图
- String covert = getCovertUrl(musicResponsiveHeaderRenderer.getJSONObject("thumbnail")
- .getJSONObject("musicThumbnailRenderer"), true);
+ JSONObject contents = jsonObject.getJSONObject("contents");
+ JSONObject twoColumnBrowseResultsRenderer = contents.optJSONObject("twoColumnBrowseResultsRenderer");
+ if (twoColumnBrowseResultsRenderer != null) {
+ // MUSIC_PAGE_TYPE_ALBUM、MUSIC_PAGE_TYPE_PLAYLIST
+ JSONObject jsonObject1 = contents
+ .getJSONObject("twoColumnBrowseResultsRenderer");
- //轻松愉悦的经典摇滚乐
- String title = getJsonTitle(musicResponsiveHeaderRenderer.getJSONObject("title"), 0);
+ JSONObject musicResponsiveHeaderRenderer = jsonObject1
+ .getJSONArray("tabs")
+ .getJSONObject(0)
+ .getJSONObject("tabRenderer")
+ .getJSONObject("content")
+ .getJSONObject("sectionListRenderer")
+ .getJSONArray("contents")
+ .getJSONObject(0)
+ .getJSONObject("musicResponsiveHeaderRenderer");
- String description = "";
+ //封面图
+ String covert = getCovertUrl(musicResponsiveHeaderRenderer.getJSONObject("thumbnail"), true);
+ CommonUtils.LogMsg("----图片-------------covert=" + covert);
+
+ //轻松愉悦的经典摇滚乐
+ String title = getJsonTitle(musicResponsiveHeaderRenderer.getJSONObject("title"), 0);
+
+ String description = "";
- //110 首歌曲.超过6小时
- String secondSubtitle = getJsonTextNew(musicResponsiveHeaderRenderer.getJSONObject("secondSubtitle"));
+ //110 首歌曲.超过6小时
+ String secondSubtitle = getJsonTextNew(musicResponsiveHeaderRenderer.getJSONObject("secondSubtitle"));
- if(musicResponsiveHeaderRenderer.has("description")){
- //-----------------单曲合集类型
- //Hold on to the feeling.
- description = getJsonTitle(musicResponsiveHeaderRenderer.getJSONObject("description")
- .getJSONObject("musicDescriptionShelfRenderer")
- .getJSONObject("description"), 0);
- }
- if(musicResponsiveHeaderRenderer.has("subtitle")){
- //-----------------专辑类型
- //专辑.1998
- description = getJsonTextNew(musicResponsiveHeaderRenderer.getJSONObject("subtitle"));
- }
+ if (musicResponsiveHeaderRenderer.has("description")) {
+ //-----------------单曲合集类型
+ //Hold on to the feeling.
+ description = getJsonTitle(musicResponsiveHeaderRenderer.getJSONObject("description")
+ .getJSONObject("musicDescriptionShelfRenderer")
+ .getJSONObject("description"), 0);
+ }
+ if (musicResponsiveHeaderRenderer.has("subtitle")) {
+ //-----------------专辑类型
+ //专辑.1998
+ description = getJsonTextNew(musicResponsiveHeaderRenderer.getJSONObject("subtitle"));
+ }
- responseCategoryList.setCovert(covert);
- responseCategoryList.setDescription(description);
- responseCategoryList.setTitle(title);
- responseCategoryList.setSecondSubtitle(secondSubtitle);
+ responseCategoryList.setCovert(covert);
+ responseCategoryList.setDescription(description);
+ responseCategoryList.setTitle(title);
+ responseCategoryList.setSecondSubtitle(secondSubtitle);
- CommonUtils.LogMsg("-------------title="+title+"--description="+description+"---secondSubtitle="+secondSubtitle+"---covert="+covert);
+ CommonUtils.LogMsg("-------------title=" + title + "--description=" + description + "---secondSubtitle=" + secondSubtitle + "---covert=" + covert);
- JSONObject contentsArray = jsonObject1.getJSONObject("secondaryContents")
- .getJSONObject("sectionListRenderer")
- .getJSONArray("contents")
- .getJSONObject(0);
- List mList = new ArrayList<>();
- if(contentsArray.has("musicPlaylistShelfRenderer")){
- //分类音乐合集的播放列表
- JSONArray jsonArray = contentsArray.getJSONObject("musicPlaylistShelfRenderer")
- .getJSONArray("contents");
+ JSONObject contentsArray = jsonObject1.getJSONObject("secondaryContents")
+ .getJSONObject("sectionListRenderer")
+ .getJSONArray("contents")
+ .getJSONObject(0);
+ List mList = new ArrayList<>();
+ if (contentsArray.has("musicPlaylistShelfRenderer")) {
+ // MUSIC_PAGE_TYPE_PLAYLIST、MUSIC_PAGE_TYPE_USER_CHANNEL
+ JSONArray jsonArray = contentsArray.getJSONObject("musicPlaylistShelfRenderer")
+ .getJSONArray("contents");
- for(int i = 0;i getMusicPlayUrl(@Body RequestBody requestBody);
-
- @GET("videoplayback?expire=1727100941&ei=rSPxZoSXJ_eM2_gPgqT8mAs&ip=146.19.167.8&id=o-ADGacaLEhb3NOOc74tfR50VCTKy0vnUb2_GAm-tPlv9n&itag=137&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=f8&mm=31%2C29&mn=sn-tt1e7nlz%2Csn-vgqsknzd&ms=au%2Crdu&mv=m&mvi=2&pl=24&gcr=us&initcwndbps=6450000&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=4444925&dur=293.280&lmt=1688643558849956&mt=1727078942&fvip=3&keepalive=yes&fexp=51299152&c=ANDROID_MUSIC&txp=4532434&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cgcr%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAKjjifMN7NMLqeoVXyqHPK1uHqev1PcnVMoycknt4QGfAiEAiCEcEYPDpQsCbE0tJ6MXjvPs4HmT0yM8Yoa26rWpc7M%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=ABPmVW0wRAIgeur5lMiKDgdWV5rrRTkmt0jbOQnifmVQwoTXk_Y17E0CIBfjGXpbdW2u3mtu1I-")
- Observable getTest();
-
-
-
- //首页分类项下的播放列表子页面 (类型1:单曲合集、2:专辑、3:音乐视频 ,不同类型返回数据结构有区别)
- @POST("youtubei/v1/browse")
+ //首页分类项下的播放列表子页面 (类型1:单曲合集、2:专辑、3:音乐视频合集 ,不同类型返回数据结构有区别)
+ @POST("youtubei/v1/browse?prettyPrint=false")
@Headers("X-Goog-Api-Key:AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8")
Observable getCategoryList(@Body RequestBody requestBody);
diff --git a/app/src/main/java/com/hi/music/player/network/RetrofitManager.java b/app/src/main/java/com/hi/music/player/network/RetrofitManager.java
index 3adf3ba..c051aa3 100644
--- a/app/src/main/java/com/hi/music/player/network/RetrofitManager.java
+++ b/app/src/main/java/com/hi/music/player/network/RetrofitManager.java
@@ -53,7 +53,7 @@ public class RetrofitManager {
.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
-// .addInterceptor(httpLoggingInterceptor)
+ .addInterceptor(httpLoggingInterceptor)
.build();
retrofit = new Retrofit.Builder()
.baseUrl(base_Host)
@@ -153,9 +153,18 @@ public class RetrofitManager {
public void getCategoryList(String browserId,RequestListener requestListener) {
BodyHome bodyHome = new BodyHome();
bodyHome.setBrowseId(browserId);
+// bodyHome.setBrowseId("VLPLI-asvmHZWNo_xjMMfD_v2O2lTyCdrjaK");
+
+ ContextBody.Client client = bodyHome.getContext().getClient();
+ client.setClientVersion("1.20240506.01.00");
+
+
Gson gson = new Gson();
String s = gson.toJson(bodyHome);
RequestBody requestBody = RequestBody.Companion.create(s, JSON);
+
+
+
musicApi.getCategoryList(requestBody)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/A_HomeActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/A_HomeActivity.java
index 23460b7..dba4520 100644
--- a/app/src/main/java/com/hi/music/player/ui/activity/A_HomeActivity.java
+++ b/app/src/main/java/com/hi/music/player/ui/activity/A_HomeActivity.java
@@ -92,6 +92,11 @@ public class A_HomeActivity extends BaseActivity {
return false;
}
+ @Override
+ public boolean showPanel() {
+ return false;
+ }
+
// 设置进度条
private void setupProgressBar() {
vb.circularProgressBar.setMaxProgress(100); // 设置进度条最大值
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/A_PlayActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/A_PlayActivity.java
index cfdb627..ca26528 100644
--- a/app/src/main/java/com/hi/music/player/ui/activity/A_PlayActivity.java
+++ b/app/src/main/java/com/hi/music/player/ui/activity/A_PlayActivity.java
@@ -313,6 +313,11 @@ public class A_PlayActivity extends BaseActivity {
return false; // 设置状态栏为非亮色
}
+ @Override
+ public boolean showPanel() {
+ return false;
+ }
+
@Override
public void onClick(View v) {
// 处理其他点击事件
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/A_SettingActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/A_SettingActivity.java
index 85b7420..3d38618 100644
--- a/app/src/main/java/com/hi/music/player/ui/activity/A_SettingActivity.java
+++ b/app/src/main/java/com/hi/music/player/ui/activity/A_SettingActivity.java
@@ -53,6 +53,11 @@ public class A_SettingActivity extends BaseActivity {
return false;
}
+ @Override
+ public boolean showPanel() {
+ return false;
+ }
+
@Override
public void onClick(View v) {
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/A_SplashActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/A_SplashActivity.java
index d60e1cc..b7bb82b 100644
--- a/app/src/main/java/com/hi/music/player/ui/activity/A_SplashActivity.java
+++ b/app/src/main/java/com/hi/music/player/ui/activity/A_SplashActivity.java
@@ -39,6 +39,11 @@ public class A_SplashActivity extends BaseActivity {
return false;
}
+ @Override
+ public boolean showPanel() {
+ return false;
+ }
+
public void intData(){
countDownTimer = new CountDownTimer(SPLASH_TIME_OUT, 100) {
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 0b78b96..6c572f4 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
@@ -1,22 +1,40 @@
package com.hi.music.player.ui.activity;
+import static android.view.Gravity.CENTER_HORIZONTAL;
+
+import android.net.Uri;
import android.os.Bundle;
+import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
+import android.widget.FrameLayout;
+import android.widget.MediaController;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsControllerCompat;
+import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModel;
+import androidx.media3.common.MediaItem;
+import androidx.media3.common.Player;
import androidx.viewbinding.ViewBinding;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.CircleCrop;
+import com.hi.music.player.MusicApplication;
+import com.hi.music.player.databinding.ActivityBaseBinding;
+import com.hi.music.player.databinding.LayoutPanelBinding;
+import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.helper.MyValue;
import com.hi.music.player.helper.ViewModelScope;
+import com.hi.music.player.media3.MyMediaControllerManager;
+import com.hi.music.player.ui.activity.viewmodel.VMApplication;
import java.io.IOException;
-public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener{
+public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
private final ViewModelScope mViewModelScope = new ViewModelScope();
@@ -25,33 +43,138 @@ public abstract class BaseActivity extends AppCompatActiv
private Window window;
private View decorView;
protected View mView;
+ private ActivityBaseBinding rootVb;
+
+ protected VMApplication vmApplication;
+ protected MyMediaControllerManager mediaControllerManager;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
vb = getViewBinding();
View root = vb.getRoot();
- setContentView(root);
+ rootVb = ActivityBaseBinding.inflate(getLayoutInflater(), null, false);
+ rootVb.frameLayout.addView(root);
+ setContentView(rootVb.getRoot());
window = getWindow();
decorView = window.getDecorView();
mView = decorView.getRootView();
+ vmApplication = getApplicationScopeViewModel(VMApplication.class);
+ mediaControllerManager = MyMediaControllerManager.getInstance();
+
+ if (showPanel())
+ initPanel();
setStatusBar();
if (isFullScreen()) {
- root.setPadding(0,100,0,0);
+ root.setPadding(0, 100, 0, 0);
initFullScreen();
}
onCreateInit();
onInitClick();
}
- protected abstract T getViewBinding();
- protected abstract void onCreateInit();
+ protected abstract T getViewBinding();
- protected abstract void onInitClick();
+
+ protected abstract void onCreateInit();
+
+ protected abstract void onInitClick();
public abstract boolean isFullScreen();
public abstract boolean statusBarLight();
+ public abstract boolean showPanel();
+
+ private void initPanel() {
+ LayoutPanelBinding panelVb = LayoutPanelBinding.inflate(getLayoutInflater());
+ View panelView = panelVb.getRoot();
+ FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ CommonUtils.dpToPx(74)
+ );
+ panelVb.imPlay.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ panelVb.imPlay.setSelected(!panelVb.imPlay.isSelected());
+ if (panelVb.imPlay.isSelected()) {
+ mediaControllerManager.play();
+ } else {
+ mediaControllerManager.pause();
+ }
+
+ }
+ });
+
+ if (this instanceof HomeActivity) {
+ layoutParams.setMargins(CommonUtils.dpToPx(22), 0, CommonUtils.dpToPx(22), CommonUtils.dpToPx(82));
+ } else {
+ layoutParams.setMargins(CommonUtils.dpToPx(22), 0, CommonUtils.dpToPx(22), CommonUtils.dpToPx(10));
+ }
+
+ layoutParams.gravity = Gravity.BOTTOM;
+ vmApplication.playStatus.observe(this, new Observer() {
+ @Override
+ public void onChanged(Integer integer) {
+ CommonUtils.LogMsg("----------播放状态更新=" + integer);
+ if (panelView.getParent() == null) {
+ CommonUtils.LogMsg("----------显示面板");
+ rootVb.frameLayout.addView(panelView, layoutParams);
+ }
+ MediaItem currentMediaItem = mediaControllerManager.getMediaController().getCurrentMediaItem();
+ if(currentMediaItem!= null){
+ Uri artworkUri = currentMediaItem.mediaMetadata.artworkUri;
+ CharSequence title = currentMediaItem.mediaMetadata.title;
+ CharSequence artist = currentMediaItem.mediaMetadata.artist;
+
+ if(artworkUri!= null){
+ CommonUtils.LogMsg("----------artworkUri="+artworkUri.toString());
+ Glide.with(MusicApplication.myApplication)
+ .load(artworkUri.toString())
+ .transform(new CircleCrop())
+ .into(panelVb.image);
+ }
+ panelVb.title.setText(title);
+ panelVb.singer.setText(artist);
+ }
+
+ 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 MyValue.PLAY_STATUS_CODE_PAUSE:
+ 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;
+
+ }
+
+ }
+ });
+
+
+ }
+
+
+
private void setStatusBar() {
//深色模式
WindowInsetsControllerCompat insetsController = WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
@@ -62,7 +185,7 @@ public abstract class BaseActivity extends AppCompatActiv
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// mView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
- mView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN );
+ mView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
protected K getActivityScopeViewModel(@NonNull Class modelClass) {
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 64baad0..d67274b 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
@@ -53,10 +53,11 @@ public class CategoryListActivity extends BaseActivity 1) {
+ vb.tvSingerName.setText(split[1]);
+ for (ResponsePlayListInfo playListInfo : info.getList()) {
+ playListInfo.setSingerName(split[1]);
+ }
+
+ }
+ break;
+ }
vb.tvTitle.setText(info.getTitle());
vb.tvSubTitle.setText(info.getDescription());
AdapterCategoryList adapterCategoryList = new AdapterCategoryList();
adapterCategoryList.setHomeItemClickListener(this);
+ adapterCategoryList.setPageType(mPageType);
vb.recyclerview.setLayoutManager(new LinearLayoutManager(this));
adapterCategoryList.setData(info.getList());
vb.recyclerview.setAdapter(adapterCategoryList);
@@ -207,4 +231,11 @@ public class CategoryListActivity extends BaseActivity {
return false;
}
+ @Override
+ public boolean showPanel() {
+ return true;
+ }
+
public void initView() {
int statusBarHeight = CommonUtils.getStatusBarHeight(MusicApplication.myApplication);
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/MainActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/MainActivity.java
deleted file mode 100644
index 8c26d04..0000000
--- a/app/src/main/java/com/hi/music/player/ui/activity/MainActivity.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.hi.music.player.ui.activity;
-
-import android.view.View;
-
-import com.hi.music.player.databinding.ActivityMainBinding;
-import com.hi.music.player.network.RetrofitManager;
-
-public class MainActivity extends BaseActivity {
-
-
- // EdgeToEdge.enable(this);
- @Override
- protected ActivityMainBinding getViewBinding() {
- return ActivityMainBinding.inflate(getLayoutInflater());
- }
-
- @Override
- protected void onCreateInit() {
- vb.tv.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
-
- }
- });
-
- vb.tv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- String continuation = "4qmFsgKrAhIMRkVtdXNpY19ob21lGpoCQ0FONnpBRkhVSGswZFMxUVIzazBaMFJYYjFWQ1EyOUpRa05wVWpWa1JqbDNXVmRrYkZnelRuVlpXRUo2WVVjNU1GZ3lNVEZqTW14cVdETkNhRm95Vm1aamJWWnVZVmM1ZFZsWGQxTklNV3Q1V2tSUmRHRldUa2RoTUZKS1ZteEdSR0ZXVG5GbFIzaERWVlZvTVZORlVYUlVXR3hLVVcxellVOVZNVEZqTW14cVVrZHNlbGt5T1RKYVdFbzFWVWRHYmxwV1RteGpibHB3V1RKVmRGSXlWakJUUnpsMFdsWkNhRm95VlVGQlVVSTJZVU14UkZSblFVSldWazFCUVZaV1ZFRkJSVUpCWDNGamVEY3dTa0ZuWjBVJTNE";
- String clickTrackingParams = "CBAQybcCIhMIw4eu48bLiAMVvoDkBh2lGTJl";
- String visitorData = "CgtFQThPOThGYzV0OCjDkqm3BjIKCgJVUxIEGgAgGg%3D%3D";
-// RetrofitManager.getInstance().getHomeMoreData(continuation,clickTrackingParams,visitorData);
- }
- });
-
- }
-
- @Override
- protected void onInitClick() {
-
- }
-
- @Override
- public boolean isFullScreen() {
- return false;
- }
-
- @Override
- public boolean statusBarLight() {
- return false;
- }
-
- @Override
- public void onClick(View v) {
-
- }
-}
\ No newline at end of file
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 2ed45d1..496dd91 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
@@ -54,7 +54,7 @@ public class PlayActivity extends BaseActivity implements S
private ResponseSingle responseSingle;
private VMPlay vmPlay;
- private VMApplication vmApplication;
+// private VMApplication vmApplication;
//接口返回的播放列表(没有音频数据)
@@ -65,7 +65,7 @@ public class PlayActivity extends BaseActivity implements S
private ResponsePlayListInfo musicInfo;
private Handler mHandler;
private Runnable mRunnable;
- private MyMediaControllerManager mediaControllerManager;
+// private MyMediaControllerManager mediaControllerManager;
private AdapterPlayList adapterPlayList;
@@ -99,7 +99,7 @@ public class PlayActivity extends BaseActivity implements S
@Override
protected void onCreateInit() {
vmPlay = getActivityScopeViewModel(VMPlay.class);
- vmApplication = getApplicationScopeViewModel(VMApplication.class);
+// vmApplication = getApplicationScopeViewModel(VMApplication.class);
initMediaController();
vb.progressBarLoading.setVisibility(View.VISIBLE);
@@ -159,6 +159,7 @@ public class PlayActivity extends BaseActivity implements S
}
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);
@@ -177,6 +178,7 @@ public class PlayActivity extends BaseActivity implements S
mCustomerUrlInfo = customerUrlInfo;
initShowPlayList(false);
vb.linearRetry.setVisibility(View.VISIBLE);
+ vb.progressBarLoading.setVisibility(View.GONE);
mediaControllerManager.pause();
return;
}
@@ -213,7 +215,7 @@ public class PlayActivity extends BaseActivity implements S
}
private void initMediaController() {
- mediaControllerManager = MyMediaControllerManager.getInstance();
+// mediaControllerManager = MyMediaControllerManager.getInstance();
// String videoId = responseSingle.getVideoId();
MediaItem currentMediaItem = mediaControllerManager.getMediaController().getCurrentMediaItem();
if (currentMediaItem != null) {
@@ -227,7 +229,7 @@ public class PlayActivity extends BaseActivity implements S
mediaControllerManager.resetPlayList();
}
- mediaControllerManager.addListener(new MediaControllerListener() {
+ mediaControllerManager.addListener(vmApplication,new MediaControllerListener() {
@Override
public void onPlayStatus(int playStatus) {
@@ -254,7 +256,6 @@ public class PlayActivity extends BaseActivity implements S
CommonUtils.LogMsg("------------- 播放完成");
mHandler.removeCallbacks(mRunnable); // 停止更新
updatePlayComplete();
- mediaControllerManager.playNext();
break;
case MyValue.PLAY_STATUS_CODE_PAUSE:
@@ -427,6 +428,11 @@ public class PlayActivity extends BaseActivity implements S
return false;
}
+ @Override
+ public boolean showPanel() {
+ return false;
+ }
+
@Override
public void onClick(View v) {
if (v.equals(vb.btnPlay)) {
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMApplication.java b/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMApplication.java
index 3300dfb..d4ab73b 100644
--- a/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMApplication.java
+++ b/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMApplication.java
@@ -27,8 +27,8 @@ public class VMApplication extends ViewModel {
public LiveData> playList = _playList;
- private MutableLiveData _playUrlMutableLiveData = new MutableLiveData();
- public LiveData playUrlLiveData = _playUrlMutableLiveData;
+ private MutableLiveData _playStatus = new MutableLiveData();
+ public LiveData playStatus = _playStatus;
/**
@@ -39,7 +39,9 @@ public class VMApplication extends ViewModel {
_playList.setValue(list);
}
-
+ public void setPlayStatus(int status) {
+ _playStatus.setValue(status);
+ }
}
diff --git a/app/src/main/java/com/hi/music/player/ui/fragmnt/HomeFragment.java b/app/src/main/java/com/hi/music/player/ui/fragmnt/HomeFragment.java
index 76d100b..d592f8c 100644
--- a/app/src/main/java/com/hi/music/player/ui/fragmnt/HomeFragment.java
+++ b/app/src/main/java/com/hi/music/player/ui/fragmnt/HomeFragment.java
@@ -40,7 +40,8 @@ public class HomeFragment extends BaseFragment implements H
private int requestCount = 1;
- private int totalPage = 2;
+ private int totalPage = 3;
+
private List childList = new ArrayList<>();
@@ -70,6 +71,7 @@ public class HomeFragment extends BaseFragment implements H
@Override
public void onChanged(ResponseHome responseHome) {
if(responseHome == null){
+ adapterHome.removeLoadingFooter();
requestCount--;
return;
}
@@ -90,7 +92,7 @@ public class HomeFragment extends BaseFragment implements H
super.onScrolled(recyclerView, dx, dy);
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
if (layoutManager != null && layoutManager.findLastVisibleItemPosition() == childList.size() - 1) {
- if (requestCount < totalPage) {
+ if (requestCount < totalPage&&!adapterHome.isLoadingAdded()) {
CommonUtils.LogMsg("------loadmore--");
adapterHome.addLoadingFooter();
vmHome.getHomeMore();
@@ -124,6 +126,10 @@ public class HomeFragment extends BaseFragment implements H
intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_MV, data);
intent.putExtra(MyValue.KEY_ENTER_SOURCE, MyValue.TYPE_ENTER_SOURCE_MV);
startActivity(intent);
+ }else if(pageType.equals(MyValue.PAGE_TYPE_ALBUM)){
+ Intent intent = new Intent(activity, CategoryListActivity.class);
+ intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_CATEGORY, data);
+ startActivity(intent);
}else {
Intent intent = new Intent(activity, CategoryListActivity.class);
intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_CATEGORY, data);
diff --git a/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMCategoryList.java b/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMCategoryList.java
index ada6386..fc9d4c2 100644
--- a/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMCategoryList.java
+++ b/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMCategoryList.java
@@ -31,14 +31,11 @@ public class VMCategoryList extends ViewModel {
@Override
public void onSuccess(JSONObject data) {
-// JSONObject jsonObject = CommonUtils.toJsonObject(data);
if (data != null) {
- ResponseCategoryList responseCategoryList = JsonHelper.ResolveCategoryList(data);
+ ResponseCategoryList responseCategoryList = JsonHelper.ResolveCategoryList(data,browseId);
_data.setValue(responseCategoryList);
}
}
});
}
-
-
}
diff --git a/app/src/main/res/drawable/panel_bg.xml b/app/src/main/res/drawable/panel_bg.xml
new file mode 100644
index 0000000..2f67c0d
--- /dev/null
+++ b/app/src/main/res/drawable/panel_bg.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/panel_icon_list.xml b/app/src/main/res/drawable/panel_icon_list.xml
new file mode 100644
index 0000000..cbded56
--- /dev/null
+++ b/app/src/main/res/drawable/panel_icon_list.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/panel_icon_pause.xml b/app/src/main/res/drawable/panel_icon_pause.xml
new file mode 100644
index 0000000..ed09ba1
--- /dev/null
+++ b/app/src/main/res/drawable/panel_icon_pause.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/panel_icon_play.xml b/app/src/main/res/drawable/panel_icon_play.xml
new file mode 100644
index 0000000..d3760fe
--- /dev/null
+++ b/app/src/main/res/drawable/panel_icon_play.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/selector_panel_play.xml b/app/src/main/res/drawable/selector_panel_play.xml
new file mode 100644
index 0000000..937493c
--- /dev/null
+++ b/app/src/main/res/drawable/selector_panel_play.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_base.xml b/app/src/main/res/layout/activity_base.xml
index 2492721..01f4c51 100644
--- a/app/src/main/res/layout/activity_base.xml
+++ b/app/src/main/res/layout/activity_base.xml
@@ -1,9 +1,11 @@
-
+ android:id="@+id/frame_layout"
+ android:layout_height="match_parent">
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_category_list.xml b/app/src/main/res/layout/activity_category_list.xml
index d0ffa03..faccf51 100644
--- a/app/src/main/res/layout/activity_category_list.xml
+++ b/app/src/main/res/layout/activity_category_list.xml
@@ -15,24 +15,6 @@
android:layout_width="match_parent"
android:layout_height="200dp" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/app/src/main/res/layout/activity_play.xml b/app/src/main/res/layout/activity_play.xml
index 1fa6ba3..8363284 100644
--- a/app/src/main/res/layout/activity_play.xml
+++ b/app/src/main/res/layout/activity_play.xml
@@ -86,12 +86,14 @@
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8be2028..3b28451 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -6,25 +6,25 @@
android:orientation="vertical"
tools:context=".ui.fragmnt.HomeFragment">
-
-
-
+ android:layout_height="wrap_content"
+ android:text="@string/app_name"
+ android:textSize="22sp"
+ android:padding="15dp"
+ android:textColor="@color/white"/>
+
-
diff --git a/app/src/main/res/layout/item_category_list.xml b/app/src/main/res/layout/item_category_list.xml
index 4785cc8..369bbf9 100644
--- a/app/src/main/res/layout/item_category_list.xml
+++ b/app/src/main/res/layout/item_category_list.xml
@@ -3,6 +3,7 @@
android:layout_width="match_parent"
android:layout_height="70dp"
android:paddingStart="15dp"
+ android:paddingEnd="15dp"
android:paddingTop="5dp"
android:paddingBottom="5dp">
@@ -15,12 +16,16 @@
android:id="@+id/image"
android:layout_width="60dp"
android:layout_height="60dp"
+ android:scaleType="centerCrop"
android:visibility="gone" />
@@ -31,6 +36,7 @@
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="12dp"
+ android:layout_toStartOf="@id/tv_duration"
android:layout_toEndOf="@id/left_layout"
android:orientation="vertical">
@@ -38,7 +44,8 @@
android:id="@+id/tv_song_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/app_name"
+ android:layout_marginEnd="6dp"
+ android:text="9999999999999999"
android:textColor="@color/white"
android:textSize="15sp" />
@@ -51,4 +58,14 @@
android:textSize="12sp" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_panel.xml b/app/src/main/res/layout/layout_panel.xml
new file mode 100644
index 0000000..b9f3e16
--- /dev/null
+++ b/app/src/main/res/layout/layout_panel.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 2407f89..938b93c 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -12,6 +12,9 @@
#1A1A1A
#4DFFFFFF
#FF424242
+ #80F988
+
+ #99000000
#2D9C31
\ No newline at end of file