From a079c0ecf6787d9b2a06ce6417f1dd75fbb8514e Mon Sep 17 00:00:00 2001 From: litingting Date: Tue, 15 Oct 2024 19:30:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=92=AD=E6=94=BE=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 12 +- .../player/adapter/AdapterCategoryList.java | 73 ++-- .../music/player/adapter/AdapterPlayList.java | 15 +- .../hi/music/player/adapter/BaseAdapter.java | 6 +- .../com/hi/music/player/helper/MyValue.java | 18 +- .../requestbody/child/ContextBody.java | 1 + .../response/ResponsePlayListInfo.java | 18 + .../response/child/ResponseCategory.java | 9 +- .../media3/MyMediaControllerManager.java | 129 +++---- .../hi/music/player/network/JsonHelper.java | 325 +++++++++--------- .../com/hi/music/player/network/MusicApi.java | 10 +- .../music/player/network/RetrofitManager.java | 11 +- .../player/ui/activity/A_HomeActivity.java | 5 + .../player/ui/activity/A_PlayActivity.java | 5 + .../player/ui/activity/A_SettingActivity.java | 5 + .../player/ui/activity/A_SplashActivity.java | 5 + .../player/ui/activity/BaseActivity.java | 137 +++++++- .../ui/activity/CategoryListActivity.java | 37 +- .../player/ui/activity/HomeActivity.java | 5 + .../player/ui/activity/MainActivity.java | 58 ---- .../player/ui/activity/PlayActivity.java | 18 +- .../ui/activity/viewmodel/VMApplication.java | 8 +- .../music/player/ui/fragmnt/HomeFragment.java | 10 +- .../ui/fragmnt/viewmodel/VMCategoryList.java | 5 +- app/src/main/res/drawable/panel_bg.xml | 7 + app/src/main/res/drawable/panel_icon_list.xml | 9 + .../main/res/drawable/panel_icon_pause.xml | 22 ++ app/src/main/res/drawable/panel_icon_play.xml | 18 + .../main/res/drawable/selector_panel_play.xml | 7 + app/src/main/res/layout/activity_base.xml | 10 +- .../res/layout/activity_category_list.xml | 39 ++- app/src/main/res/layout/activity_play.xml | 6 +- app/src/main/res/layout/fragment_home.xml | 18 +- .../main/res/layout/item_category_list.xml | 19 +- app/src/main/res/layout/layout_panel.xml | 78 +++++ app/src/main/res/values/colors.xml | 3 + 36 files changed, 776 insertions(+), 385 deletions(-) delete mode 100644 app/src/main/java/com/hi/music/player/ui/activity/MainActivity.java create mode 100644 app/src/main/res/drawable/panel_bg.xml create mode 100644 app/src/main/res/drawable/panel_icon_list.xml create mode 100644 app/src/main/res/drawable/panel_icon_pause.xml create mode 100644 app/src/main/res/drawable/panel_icon_play.xml create mode 100644 app/src/main/res/drawable/selector_panel_play.xml create mode 100644 app/src/main/res/layout/layout_panel.xml 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 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