diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 22ac2c6..33d41eb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -22,6 +22,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.MusicApp"
tools:targetApi="31">
+
@@ -38,9 +41,7 @@
-
-
+ android:screenOrientation="portrait">
@@ -50,10 +51,9 @@
-
+ android:exported="true" />
{
+ @Override
+ protected ItemResultBinding getViewBinding(ViewGroup parent) {
+ return ItemResultBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ ResponseResultList resultList = data.get(position);
+
+ VHolder itemHolder = (VHolder) holder;
+ ItemResultBinding vb = itemHolder.getVb();
+
+ vb.tvHeaderTitle.setText(resultList.getHeaderTitle());
+
+
+ ItemDecoration itemDecoration ;
+
+ if(position == 0){
+ itemDecoration = new ItemDecoration(10,0,0);
+ AdapterResultListSong adapterResultListSong = new AdapterResultListSong();
+ adapterResultListSong.setData(resultList.getChildList());
+ vb.listChild.setAdapter(adapterResultListSong);
+ vb.listChild.setLayoutManager(new LinearLayoutManager(MusicApplication.myApplication));
+ if(homeItemClickListener!= null)
+ adapterResultListSong.setHomeItemClickListener(homeItemClickListener);
+ }else {
+ itemDecoration = new ItemDecoration(0,10,0);
+ AdapterResultListAlbum adapterResultListAlbum = new AdapterResultListAlbum();
+ adapterResultListAlbum.setData(resultList.getChildList());
+ vb.listChild.setAdapter(adapterResultListAlbum);
+ vb.listChild.setLayoutManager(new LinearLayoutManager(MusicApplication.myApplication, LinearLayoutManager.HORIZONTAL,false));
+ if(homeItemClickListener!= null)
+ adapterResultListAlbum.setHomeItemClickListener(homeItemClickListener);
+ }
+ vb.listChild.addItemDecoration(itemDecoration);
+
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterResultListAlbum.java b/app/src/main/java/com/hi/music/player/adapter/AdapterResultListAlbum.java
new file mode 100644
index 0000000..b381c2c
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/adapter/AdapterResultListAlbum.java
@@ -0,0 +1,80 @@
+package com.hi.music.player.adapter;
+
+import android.graphics.drawable.Drawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.Target;
+import com.hi.music.player.MusicApplication;
+import com.hi.music.player.R;
+import com.hi.music.player.databinding.ItemResultListAlbumBinding;
+import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.javabean.response.child.ResponseResultListChild;
+
+public class AdapterResultListAlbum extends BaseAdapter{
+ @Override
+ protected ItemResultListAlbumBinding getViewBinding(ViewGroup parent) {
+ return ItemResultListAlbumBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ ResponseResultListChild listChild = data.get(position);
+
+
+ VHolder itemHolder = (VHolder) holder;
+ ItemResultListAlbumBinding vb = itemHolder.getVb();
+ if(position == data.size()-1){
+ vb.view.setVisibility(View.VISIBLE);
+ }else {
+ vb.view.setVisibility(View.GONE);
+ }
+ Glide.with(MusicApplication.myApplication)
+ .asDrawable()
+ .load(listChild.getThumbnail())
+ .apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(4))))
+ .placeholder(R.drawable.placeholder)
+ .listener(new RequestListener() {
+ @Override
+ public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) {
+ CommonUtils.LogMsg(e.getMessage());
+ return false;
+ }
+
+ @Override
+ public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) {
+ return false;
+ }
+ })
+ .into(vb.header);
+ vb.tvTitle.setText(listChild.getSongName());
+ vb.tvSubtitle.setText(listChild.getSubTitle());
+ vb.header.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(homeItemClickListener != null){
+ int absoluteAdapterPosition = itemHolder.getAbsoluteAdapterPosition();
+ String videoId = listChild.getVideoId();
+ String browserId = listChild.getBrowserId();
+ if(videoId == null||videoId.isEmpty()){
+ homeItemClickListener.onClickResultAlbum(listChild,absoluteAdapterPosition);
+ }else if(browserId!= null&&!browserId.isEmpty()){
+ homeItemClickListener.onClickResultSong(listChild,absoluteAdapterPosition);
+ }
+ }
+ }
+ });
+ CommonUtils.LogMsg("-------Album getBrowserId="+listChild.getBrowserId()+"---getPlayListId= "+listChild.getPlayListId()+"---getVideoId="+listChild.getVideoId());
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterResultListSong.java b/app/src/main/java/com/hi/music/player/adapter/AdapterResultListSong.java
new file mode 100644
index 0000000..a22d6ee
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/adapter/AdapterResultListSong.java
@@ -0,0 +1,80 @@
+package com.hi.music.player.adapter;
+
+import android.graphics.drawable.Drawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.Target;
+import com.hi.music.player.MusicApplication;
+import com.hi.music.player.R;
+import com.hi.music.player.databinding.ItemResultListSongBinding;
+import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.javabean.response.child.ResponseResultListChild;
+
+public class AdapterResultListSong extends BaseAdapter{
+ @Override
+ protected ItemResultListSongBinding getViewBinding(ViewGroup parent) {
+ return ItemResultListSongBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ ResponseResultListChild listChild = data.get(position);
+
+ VHolder itemHolder = (VHolder) holder;
+ ItemResultListSongBinding vb = itemHolder.getVb();
+
+ Glide.with(MusicApplication.myApplication)
+ .asDrawable()
+ .load(listChild.getThumbnail())
+ .apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(4))))
+ .placeholder(R.drawable.placeholder)
+ .listener(new RequestListener() {
+ @Override
+ public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) {
+ CommonUtils.LogMsg(e.getMessage());
+ return false;
+ }
+
+ @Override
+ public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) {
+ return false;
+ }
+ })
+ .into(vb.imCovert);
+ vb.tvSongName.setText(listChild.getSongName());
+ String s = listChild.getSubTitle() +" • "+listChild.getPlayCount();
+ vb.tvSubtitle.setText(s);
+
+ vb.getRoot().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(homeItemClickListener != null){
+ int absoluteAdapterPosition = itemHolder.getAbsoluteAdapterPosition();
+ String videoId = listChild.getVideoId();
+ String browserId = listChild.getBrowserId();
+ if(videoId == null||videoId.isEmpty()){
+ homeItemClickListener.onClickResultAlbum(listChild,absoluteAdapterPosition);
+ }else if(browserId!= null&&!browserId.isEmpty()){
+ homeItemClickListener.onClickResultSong(listChild,absoluteAdapterPosition);
+ }
+
+ }
+ }
+ });
+
+ CommonUtils.LogMsg("-------Song getBrowserId="+listChild.getBrowserId()+"---getPlayListId= "+listChild.getPlayListId()+"---getVideoId="+listChild.getVideoId());
+
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterSearch.java b/app/src/main/java/com/hi/music/player/adapter/AdapterSearch.java
new file mode 100644
index 0000000..a89df58
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/adapter/AdapterSearch.java
@@ -0,0 +1,69 @@
+package com.hi.music.player.adapter;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.CircleCrop;
+import com.hi.music.player.MusicApplication;
+import com.hi.music.player.R;
+import com.hi.music.player.databinding.ItemSearchBinding;
+import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.javabean.response.ResponseSearch;
+
+public class AdapterSearch extends BaseAdapter {
+ @Override
+ protected ItemSearchBinding getViewBinding(ViewGroup parent) {
+ return ItemSearchBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ ResponseSearch responseSearch = data.get(position);
+
+ VHolder itemHolder = (VHolder) holder;
+ ItemSearchBinding vb = itemHolder.getVb();
+
+ vb.tvHeaderTitle.setText(responseSearch.getHeaderTitle());
+
+ String beastSongTCovert = responseSearch.getBeastSongTCovert();
+ if (beastSongTCovert != null && !beastSongTCovert.isEmpty()) {
+ vb.layoutBest.setVisibility(View.VISIBLE);
+ Glide.with(MusicApplication.myApplication)
+ .load(beastSongTCovert)
+ .transform(new CircleCrop())
+ .into(vb.imBestCovert);
+ vb.tvBestTitle.setText(responseSearch.getBeastSongTitle());
+ vb.tvBestSubtitle.setText(responseSearch.getBeastSongDescribe());
+ vb.layout.setBackground(ContextCompat.getDrawable(MusicApplication.myApplication, R.drawable.bg_best_bg));
+ vb.layout.setPadding(CommonUtils.dpToPx(6), CommonUtils.dpToPx(10), 0, 0);
+ vb.tvPlay.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (homeItemClickListener != null) {
+ homeItemClickListener.onClickSearchResultBest(responseSearch);
+
+ }
+ }
+ });
+ } else {
+ vb.layoutBest.setVisibility(View.GONE);
+ vb.layout.setBackground(null);
+ vb.layout.setPadding(0, 0, 0, 0);
+ }
+
+ AdapterSearchChild adapterSearchChild = new AdapterSearchChild();
+ adapterSearchChild.setData(responseSearch.getList());
+ vb.list.setAdapter(adapterSearchChild);
+ if (homeItemClickListener != null)
+ adapterSearchChild.setHomeItemClickListener(homeItemClickListener);
+ vb.list.setLayoutManager(new LinearLayoutManager(MusicApplication.myApplication));
+
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterSearchChild.java b/app/src/main/java/com/hi/music/player/adapter/AdapterSearchChild.java
new file mode 100644
index 0000000..a755e75
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/adapter/AdapterSearchChild.java
@@ -0,0 +1,71 @@
+package com.hi.music.player.adapter;
+
+import android.graphics.drawable.Drawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.Target;
+import com.hi.music.player.MusicApplication;
+import com.hi.music.player.R;
+import com.hi.music.player.databinding.ItemSearchBinding;
+import com.hi.music.player.databinding.ItemSearchChildBinding;
+import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.javabean.response.ResponseSearch;
+import com.hi.music.player.javabean.response.child.ResponseSearchChild;
+
+public class AdapterSearchChild extends BaseAdapter {
+ @Override
+ protected ItemSearchChildBinding getViewBinding(ViewGroup parent) {
+ return ItemSearchChildBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ ResponseSearchChild responseSearchChild = data.get(position);
+ VHolder itemHolder = (VHolder) holder;
+ ItemSearchChildBinding vb = itemHolder.getVb();
+
+
+ Glide.with(MusicApplication.myApplication)
+ .asDrawable()
+ .apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(13))))
+ .load(responseSearchChild.getSongCovert())
+ .placeholder(R.drawable.placeholder)
+ .listener(new RequestListener() {
+ @Override
+ public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) {
+ CommonUtils.LogMsg(e.getMessage());
+ return false;
+ }
+
+ @Override
+ public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) {
+ return false;
+ }
+ })
+ .into(vb.imCovert);
+
+ vb.tvTitle.setText(responseSearchChild.getSongTitle());
+ vb.tvSubtitle.setText(responseSearchChild.getSongDescribe());
+ vb.getRoot().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (homeItemClickListener != null) {
+ homeItemClickListener.onClickSearchResult(responseSearchChild);
+ }
+ }
+ });
+
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/api/HomeItemClickListener.java b/app/src/main/java/com/hi/music/player/api/HomeItemClickListener.java
index 19ca3e2..8fe1d6d 100644
--- a/app/src/main/java/com/hi/music/player/api/HomeItemClickListener.java
+++ b/app/src/main/java/com/hi/music/player/api/HomeItemClickListener.java
@@ -1,7 +1,10 @@
package com.hi.music.player.api;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
+import com.hi.music.player.javabean.response.ResponseSearch;
import com.hi.music.player.javabean.response.child.ResponseCategory;
+import com.hi.music.player.javabean.response.child.ResponseResultListChild;
+import com.hi.music.player.javabean.response.child.ResponseSearchChild;
import com.hi.music.player.javabean.response.child.ResponseSingle;
public interface HomeItemClickListener {
@@ -34,4 +37,33 @@ public interface HomeItemClickListener {
}
+
+ /**
+ * 点击搜索最佳结果第一个
+ * @param
+ */
+ default void onClickSearchResultBest(ResponseSearch responseSearch){
+
+ }
+
+ /**
+ * 点击搜索结果第
+ * @param
+ */
+ default void onClickSearchResult(ResponseSearchChild responseSearchChild){
+
+ }
+ /**
+ * 搜索结果详情页面点击单曲
+ * @param child
+ * @param index
+ */
+ default void onClickResultSong(ResponseResultListChild child,int index){
+
+ }
+
+ default void onClickResultAlbum(ResponseResultListChild child,int index){
+
+ }
+
}
diff --git a/app/src/main/java/com/hi/music/player/api/onPlayNextListener.java b/app/src/main/java/com/hi/music/player/api/onPlayNextListener.java
new file mode 100644
index 0000000..6c9b642
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/api/onPlayNextListener.java
@@ -0,0 +1,5 @@
+package com.hi.music.player.api;
+
+public interface onPlayNextListener {
+ void onPlayNext(boolean hasNext);
+}
diff --git a/app/src/main/java/com/hi/music/player/helper/ItemDecoration.java b/app/src/main/java/com/hi/music/player/helper/ItemDecoration.java
new file mode 100644
index 0000000..735d63a
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/helper/ItemDecoration.java
@@ -0,0 +1,75 @@
+package com.hi.music.player.helper;
+
+import android.graphics.Rect;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.StaggeredGridLayoutManager;
+
+import com.hi.music.player.MusicApplication;
+
+public class ItemDecoration extends RecyclerView.ItemDecoration {
+
+ private int v, h, ex;
+
+ public ItemDecoration(int v, int h, int ex) {
+ this.v = Math.round(dpToPx(v));
+ this.h = Math.round(dpToPx(h));
+ this.ex = Math.round(dpToPx(ex));
+ }
+
+ @Override
+ public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
+ super.getItemOffsets(outRect, view, parent, state);
+ int spanCount = 1;
+ int spanSize = 1;
+ int spanIndex = 0;
+
+ int childAdapterPosition = parent.getChildAdapterPosition(view);
+ RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
+ if (layoutManager instanceof StaggeredGridLayoutManager) {
+ StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
+ StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
+ spanCount = staggeredGridLayoutManager.getSpanCount();
+ if (layoutParams.isFullSpan()) {
+ spanSize = spanCount;
+ }
+ spanIndex = layoutParams.getSpanIndex();
+ } else if (layoutManager instanceof GridLayoutManager) {
+ GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;
+ GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams();
+ spanCount = gridLayoutManager.getSpanCount();
+ spanSize = gridLayoutManager.getSpanSizeLookup().getSpanSize(childAdapterPosition);
+ spanIndex = layoutParams.getSpanIndex();
+ } else if (layoutManager instanceof LinearLayoutManager) {
+ outRect.left = v;
+ outRect.right = v;
+ outRect.bottom = h;
+ }
+
+ if (spanSize == spanCount) {
+ outRect.left = v + ex;
+ outRect.right = v + ex;
+ outRect.bottom = h;
+
+ } else {
+ int itemAllSpacing = (v * (spanCount + 1) + ex * 2) / spanCount;
+ int left = v * (spanIndex + 1) - itemAllSpacing * spanIndex + ex;
+ int right = itemAllSpacing - left;
+ outRect.left = left;
+ outRect.right = right;
+ outRect.bottom = h;
+
+ }
+
+ }
+
+
+ public static float dpToPx(float dpValue) {
+ float density = MusicApplication.myApplication.getResources().getDisplayMetrics().density;
+ return density * dpValue + 0.5f;
+ }
+}
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 bd75fe4..665e9da 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
@@ -87,7 +87,10 @@ public class MyValue {
//-----------------------------CategoryListActivity
public static String KEY_PLAY_ACTIVITY_CATEGORY= "click_category";
+ public static String KEY_CATEGORY_LIST_TYPE= "page_type";
+ public static String KEY_CATEGORY_LIST_SINGER_NAME= "singer_name";
+ public static String KEY_CATEGORY_LIST_BROWSER_ID= "browser_id";
//-----------------------------CategoryListActivity
diff --git a/app/src/main/java/com/hi/music/player/javabean/requestbody/BodyPlayUrl.java b/app/src/main/java/com/hi/music/player/javabean/requestbody/BodyPlayUrl.java
index 03edf1f..1185799 100644
--- a/app/src/main/java/com/hi/music/player/javabean/requestbody/BodyPlayUrl.java
+++ b/app/src/main/java/com/hi/music/player/javabean/requestbody/BodyPlayUrl.java
@@ -14,7 +14,8 @@ public class BodyPlayUrl implements Serializable {
private ContextBody context = new ContextBody();
-
+// private String key = "AIzaSyC9XL3ZjwddXya6X74dJOCTL-WEYFDNX30" ;
+ private String params ="CgIQBg";
public String getVideoId() {
diff --git a/app/src/main/java/com/hi/music/player/javabean/requestbody/child/Client.java b/app/src/main/java/com/hi/music/player/javabean/requestbody/child/Client.java
index 4d66952..0038b66 100644
--- a/app/src/main/java/com/hi/music/player/javabean/requestbody/child/Client.java
+++ b/app/src/main/java/com/hi/music/player/javabean/requestbody/child/Client.java
@@ -34,5 +34,22 @@ public class Client implements Serializable {
public void setPlatform(String platform) {
this.platform = platform;
}
+
+
+ public String getGl() {
+ return gl;
+ }
+
+ public void setGl(String gl) {
+ this.gl = gl;
+ }
+
+ public String getHl() {
+ return hl;
+ }
+
+ public void setHl(String hl) {
+ this.hl = hl;
+ }
}
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/ResponseResult.java b/app/src/main/java/com/hi/music/player/javabean/response/ResponseResult.java
new file mode 100644
index 0000000..321e80d
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/javabean/response/ResponseResult.java
@@ -0,0 +1,36 @@
+package com.hi.music.player.javabean.response;
+
+import java.util.List;
+
+public class ResponseResult {
+
+ private String mainTitle;
+ private String mainCovert;
+
+ private List list;
+
+
+ public String getMainTitle() {
+ return mainTitle;
+ }
+
+ public void setMainTitle(String mainTitle) {
+ this.mainTitle = mainTitle;
+ }
+
+ public String getMainCovert() {
+ return mainCovert;
+ }
+
+ public void setMainCovert(String mainCovert) {
+ this.mainCovert = mainCovert;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/ResponseResultList.java b/app/src/main/java/com/hi/music/player/javabean/response/ResponseResultList.java
new file mode 100644
index 0000000..7a911c8
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/javabean/response/ResponseResultList.java
@@ -0,0 +1,29 @@
+package com.hi.music.player.javabean.response;
+
+import com.hi.music.player.javabean.response.child.ResponseResultListChild;
+
+import java.util.List;
+
+public class ResponseResultList {
+
+ private String headerTitle;
+
+ private List childList;
+
+
+ public String getHeaderTitle() {
+ return headerTitle;
+ }
+
+ public void setHeaderTitle(String headerTitle) {
+ this.headerTitle = headerTitle;
+ }
+
+ public List getChildList() {
+ return childList;
+ }
+
+ public void setChildList(List childList) {
+ this.childList = childList;
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/ResponseSearch.java b/app/src/main/java/com/hi/music/player/javabean/response/ResponseSearch.java
new file mode 100644
index 0000000..4bc5471
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/javabean/response/ResponseSearch.java
@@ -0,0 +1,90 @@
+package com.hi.music.player.javabean.response;
+
+import com.hi.music.player.javabean.response.child.ResponseSearchChild;
+
+import java.util.List;
+
+public class ResponseSearch {
+
+ private String headerTitle;
+
+
+ private String beastSongTitle;
+ private String beastSongTCovert;
+ private String beastSongDescribe;
+
+ private String beastBrowserId;
+
+ private String beastVideoId;
+
+ private String pageType;
+
+
+ private List list;
+
+
+ public String getBeastVideoId() {
+ return beastVideoId;
+ }
+
+ public void setBeastVideoId(String beastVideoId) {
+ this.beastVideoId = beastVideoId;
+ }
+
+ public String getHeaderTitle() {
+ return headerTitle;
+ }
+
+ public void setHeaderTitle(String headerTitle) {
+ this.headerTitle = headerTitle;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+
+ public String getBeastSongTitle() {
+ return beastSongTitle;
+ }
+
+ public void setBeastSongTitle(String beastSongTitle) {
+ this.beastSongTitle = beastSongTitle;
+ }
+
+ public String getBeastSongTCovert() {
+ return beastSongTCovert;
+ }
+
+ public void setBeastSongTCovert(String beastSongTCovert) {
+ this.beastSongTCovert = beastSongTCovert;
+ }
+
+ public String getBeastSongDescribe() {
+ return beastSongDescribe;
+ }
+
+ public void setBeastSongDescribe(String beastSongDescribe) {
+ this.beastSongDescribe = beastSongDescribe;
+ }
+
+ public String getBeastBrowserId() {
+ return beastBrowserId;
+ }
+
+ public void setBeastBrowserId(String beastBrowserId) {
+ this.beastBrowserId = beastBrowserId;
+ }
+
+ public String getPageType() {
+ return pageType;
+ }
+
+ public void setPageType(String pageType) {
+ this.pageType = pageType;
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseResultListChild.java b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseResultListChild.java
new file mode 100644
index 0000000..f27d3ee
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseResultListChild.java
@@ -0,0 +1,85 @@
+package com.hi.music.player.javabean.response.child;
+
+public class ResponseResultListChild {
+ private String thumbnail;
+
+
+ private String songName;
+ private String subTitle;
+ private String playCount;
+ private String videoId;
+ private String playListId;
+
+ private String browserId;
+
+ private String pageType;
+
+
+
+
+
+
+ public String getThumbnail() {
+ return thumbnail;
+ }
+
+ public void setThumbnail(String thumbnail) {
+ this.thumbnail = thumbnail;
+ }
+
+ public String getSongName() {
+ return songName;
+ }
+
+ public void setSongName(String songName) {
+ this.songName = songName;
+ }
+
+ public String getSubTitle() {
+ return subTitle;
+ }
+
+ public void setSubTitle(String subTitle) {
+ this.subTitle = subTitle;
+ }
+
+ public String getBrowserId() {
+ return browserId;
+ }
+
+ public void setBrowserId(String browserId) {
+ this.browserId = browserId;
+ }
+
+ public String getPageType() {
+ return pageType;
+ }
+
+ public void setPageType(String pageType) {
+ this.pageType = pageType;
+ }
+
+ public String getPlayCount() {
+ return playCount;
+ }
+
+ public void setPlayCount(String playCount) {
+ this.playCount = playCount;
+ }
+
+ public String getVideoId() {
+ return videoId;
+ }
+
+ public void setVideoId(String videoId) {
+ this.videoId = videoId;
+ }
+
+ public String getPlayListId() {
+ return playListId;
+ }
+
+ public void setPlayListId(String playListId) {
+ this.playListId = playListId;
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseSearchChild.java b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseSearchChild.java
new file mode 100644
index 0000000..6438aba
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseSearchChild.java
@@ -0,0 +1,75 @@
+package com.hi.music.player.javabean.response.child;
+
+public class ResponseSearchChild {
+
+
+
+
+
+ private String songTitle;
+ private String songCovert;
+ private String songDescribe;
+ private String songPlayCount;
+ private String songVideoId;
+
+ private String browserId;
+
+ private String pageType;
+
+
+ public String getBrowserId() {
+ return browserId;
+ }
+
+ public void setBrowserId(String browserId) {
+ this.browserId = browserId;
+ }
+
+ public String getPageType() {
+ return pageType;
+ }
+
+ public void setPageType(String pageType) {
+ this.pageType = pageType;
+ }
+
+ public String getSongTitle() {
+ return songTitle;
+ }
+
+ public void setSongTitle(String songTitle) {
+ this.songTitle = songTitle;
+ }
+
+ public String getSongCovert() {
+ return songCovert;
+ }
+
+ public void setSongCovert(String songCovert) {
+ this.songCovert = songCovert;
+ }
+
+ public String getSongDescribe() {
+ return songDescribe;
+ }
+
+ public void setSongDescribe(String songDescribe) {
+ this.songDescribe = songDescribe;
+ }
+
+ public String getSongPlayCount() {
+ return songPlayCount;
+ }
+
+ public void setSongPlayCount(String songPlayCount) {
+ this.songPlayCount = songPlayCount;
+ }
+
+ public String getSongVideoId() {
+ return songVideoId;
+ }
+
+ public void setSongVideoId(String songVideoId) {
+ this.songVideoId = songVideoId;
+ }
+}
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 ad33560..bec77b7 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
@@ -19,6 +19,7 @@ import com.hi.music.player.MusicApplication;
import com.hi.music.player.api.MediaControllerListener;
import com.hi.music.player.api.MediaControllerStatusListener;
import com.hi.music.player.api.OnHasUrlAction;
+import com.hi.music.player.api.onPlayNextListener;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
@@ -351,7 +352,7 @@ public class MyMediaControllerManager {
mediaController.stop();
}
- public void playNext() {
+ public void playNext(onPlayNextListener listener) {
if (mediaController.hasNextMediaItem()) {
int nextMediaItemIndex = mediaController.getNextMediaItemIndex();
@@ -363,13 +364,7 @@ public class MyMediaControllerManager {
}
});
} else {
-// int currentMediaItemIndex = mediaController.getCurrentMediaItemIndex();
-// if (currentMediaItemIndex < playList.size() - 1) {
-// //应该有下一首,可能是歌曲url请求失败,需要重新请求
-// int nextIndex = currentMediaItemIndex + 1;
-// mListener.onRequestNextUri(playList.get(nextIndex).getVideoId(), nextIndex, true);
-// CommonUtils.LogMsg("-------------应该有下一首,可能是歌曲url请求失败,需要重新请求");
-// }
+ listener.onPlayNext(false);
}
}
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 761383f..6ad3009 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
@@ -5,9 +5,14 @@ import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponseCategoryList;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.ResponsePlayUrl;
+import com.hi.music.player.javabean.response.ResponseResult;
+import com.hi.music.player.javabean.response.ResponseResultList;
+import com.hi.music.player.javabean.response.ResponseSearch;
import com.hi.music.player.javabean.response.child.ResponseCategory;
import com.hi.music.player.javabean.response.ResponseHome;
import com.hi.music.player.javabean.response.child.ResponseHomeChild;
+import com.hi.music.player.javabean.response.child.ResponseResultListChild;
+import com.hi.music.player.javabean.response.child.ResponseSearchChild;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import org.json.JSONArray;
@@ -15,7 +20,9 @@ import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
public class JsonHelper {
@@ -363,7 +370,7 @@ public class JsonHelper {
*
* @param jsonObject
*/
- public static void ResolveSearchResult(JSONObject jsonObject) {
+ public static List ResolveSearchResult(JSONObject jsonObject) {
try {
JSONArray jsonArray = jsonObject.getJSONObject("contents")
.getJSONObject("tabbedSearchResultsRenderer")
@@ -373,25 +380,298 @@ public class JsonHelper {
.getJSONObject("content")
.getJSONObject("sectionListRenderer")
.getJSONArray("contents");
- for(int i =0;i searchList = new ArrayList<>();
+ for (int i = 0; i < jsonArray.length(); i++) {
+ ResponseSearch responseSearch = new ResponseSearch();
+ JSONArray contents1 = null;
+
+ String headerTitle = "";
+
+ JSONObject contents = jsonArray.getJSONObject(i);
+
//最佳结果
+ JSONObject musicCardShelfRenderer = contents.optJSONObject("musicCardShelfRenderer");
- }else {
+ JSONObject musicShelfRenderer = contents.optJSONObject("musicShelfRenderer");
+ if(musicCardShelfRenderer!= null){
+ String covertUrl = getCovertUrl(musicCardShelfRenderer.getJSONObject("thumbnail"), true);
+ String title = getJsonTitle(musicCardShelfRenderer.getJSONObject("title"), 0);
+ String subtitle = getJsonTextNew(musicCardShelfRenderer.getJSONObject("subtitle"));
+
+ headerTitle = getJsonTitle(musicCardShelfRenderer.getJSONObject("header")
+ .getJSONObject("musicCardShelfHeaderBasicRenderer")
+ .getJSONObject("title"), 0);
+ contents1 = musicCardShelfRenderer.getJSONArray("contents");
+
+
+ JSONObject jsonObject1 = musicCardShelfRenderer.getJSONObject("title")
+ .getJSONArray("runs")
+ .getJSONObject(0);
+ String[] browser = getBrowser(jsonObject1);
+ if (browser != null) {
+ responseSearch.setBeastBrowserId(browser[0]);
+ responseSearch.setPageType(browser[1]);
+
+
+ }
+ String[] watchEndPoint = getWatchEndPoint(jsonObject1);
+ if(watchEndPoint!= null){
+ responseSearch.setBeastVideoId(watchEndPoint[0]);
+ }
+
+ responseSearch.setBeastSongTCovert(covertUrl);
+ responseSearch.setBeastSongTitle(title);
+ responseSearch.setBeastSongDescribe(subtitle);
+
+ CommonUtils.LogMsg("--搜索结果 最佳" + "--songTitle=" + responseSearch.getBeastSongTitle() + "---videoId="+responseSearch.getBeastVideoId()+"---browserId="+responseSearch.getBeastBrowserId() );
+ }else if(musicShelfRenderer!= null){
+ headerTitle = getJsonTitle(musicShelfRenderer.getJSONObject("title"), 0);
+ contents1 = musicShelfRenderer.getJSONArray("contents");
+ }
+
+ responseSearch.setHeaderTitle(headerTitle);
+
+ List list = new ArrayList<>();
+ if(contents1!=null){
+ for (int k = 0; k < contents1.length(); k++) {
+ ResponseSearchChild responseSearchChild = new ResponseSearchChild();
+
+ JSONObject musicResponsiveListItemRenderer = contents1.getJSONObject(k)
+ .optJSONObject("musicResponsiveListItemRenderer");
+
+ String playCount = "";
+ String songTitle = "";
+ String videoId = "";
+ String describe = "";
+ String browserId = "";
+ String pageType = "";
+
+ String covertUrl1 = "";
+ if(musicResponsiveListItemRenderer!= null){
+ covertUrl1 = getCovertUrl(musicResponsiveListItemRenderer.
+ getJSONObject("thumbnail")
+ .getJSONObject("musicThumbnailRenderer"), true);
+
+
+ String[] browser1 = getBrowser(musicResponsiveListItemRenderer);
+ if (browser1 != null) {
+ browserId = browser1[0];
+ pageType = browser1[1];
+ if(Objects.equals(pageType, "MUSIC_PAGE_TYPE_PODCAST_SHOW_DETAIL_PAGE") ||pageType.equals("MUSIC_PAGE_TYPE_USER_CHANNEL")){
+ //博客或者个人资料
+ continue;
+ }
+ }
+
+ JSONArray flexColumns = musicResponsiveListItemRenderer.getJSONArray("flexColumns");
+ for (int h = 0; h < flexColumns.length(); h++) {
+ JSONObject musicResponsiveListItemFlexColumnRenderer = flexColumns.getJSONObject(h)
+ .getJSONObject("musicResponsiveListItemFlexColumnRenderer");
+ JSONObject text = musicResponsiveListItemFlexColumnRenderer.getJSONObject("text");
+ if (h == 0) {
+ songTitle = getJsonTitle(text, 0);
+ String[] runs = getWatchEndPoint(text.getJSONArray("runs").getJSONObject(0));
+ videoId = runs[0];
+ } else if (h == 1) {
+ describe = getJsonTextNew(text);
+ } else {
+ playCount = getJsonTitle(text, 0);
+ }
+
+// JSONArray runs = text.getJSONArray("runs");
+// for (int g = 0; g < runs.length(); g++) {
+// JSONObject jsonObject1 = runs.getJSONObject(g);
+// String[] browser = getBrowser(jsonObject1);
+// if (browser != null) {
+// browserId = browser[0];
+// pageType = browser[1];
+// }
+// }
+
+ }
+ boolean b = videoId == null || videoId.isEmpty();
+ if(b&&pageType.isEmpty()){
+ continue;
+ }
+ responseSearchChild.setBrowserId(browserId);
+ responseSearchChild.setPageType(pageType);
+ responseSearchChild.setSongCovert(covertUrl1);
+ responseSearchChild.setSongTitle(songTitle);
+ responseSearchChild.setSongDescribe(describe);
+ responseSearchChild.setSongPlayCount(playCount);
+ responseSearchChild.setSongVideoId(videoId);
+ CommonUtils.LogMsg("--搜索结果 videoId=" + videoId + "--songTitle=" + songTitle + "---browserId=" + browserId+"---pageType="+pageType);
+ list.add(responseSearchChild);
+ }
+
+
+ }
+ }
+ if(list.size()>0){
+ responseSearch.setList(list);
+ searchList.add(responseSearch);
}
- }
+ }
+ return searchList;
} catch (JSONException e) {
CommonUtils.LogErrorMsg("--" + e.getMessage());
+ return null;
}
-
-
}
+ /**
+ * 搜索结果返回的browserId 进行请求返回的数据列表
+ *
+ * @return
+ */
+ public static ResponseResult ResolveSearchResultList(JSONObject jsonObject) {
+ try {
+
+ ResponseResult responseResult = new ResponseResult();
+
+ JSONObject contents = jsonObject.getJSONObject("contents");
+ JSONObject musicImmersiveHeaderRenderer = jsonObject.getJSONObject("header")
+ .getJSONObject("musicImmersiveHeaderRenderer");
+
+ String mainTitle = getJsonTitle(musicImmersiveHeaderRenderer.getJSONObject("title"), 0);
+ String thumbnail = getCovertUrl(musicImmersiveHeaderRenderer.getJSONObject("thumbnail"), true);
+
+ responseResult.setMainTitle(mainTitle);
+ responseResult.setMainCovert(thumbnail);
+
+ JSONObject singleColumnBrowseResultsRenderer = contents.optJSONObject("singleColumnBrowseResultsRenderer");
+ if (singleColumnBrowseResultsRenderer != null) {
+ JSONArray contentsArray = singleColumnBrowseResultsRenderer
+ .getJSONArray("tabs")
+ .getJSONObject(0)
+ .getJSONObject("tabRenderer")
+ .getJSONObject("content")
+ .getJSONObject("sectionListRenderer")
+ .getJSONArray("contents");
+ List list = new ArrayList<>();
+ for (int a = 0; a < contentsArray.length(); a++) {
+ ResponseResultList resultList = new ResponseResultList();
+ List childList = new ArrayList<>();
+
+
+ JSONObject arrayJSONObject = contentsArray.getJSONObject(a);
+ JSONObject musicShelfRenderer = arrayJSONObject.optJSONObject("musicShelfRenderer");
+ JSONObject musicCarouselShelfRenderer = arrayJSONObject.optJSONObject("musicCarouselShelfRenderer");
+ if (musicShelfRenderer != null) {
+ String headerTitle = getJsonTitle(musicShelfRenderer.getJSONObject("title"), 0);
+ resultList.setHeaderTitle(headerTitle);
+
+ JSONArray contents1 = musicShelfRenderer.getJSONArray("contents");
+ for (int f = 0; f < contents1.length(); f++) {
+ ResponseResultListChild responseResultListChild = new ResponseResultListChild();
+
+ JSONObject musicResponsiveListItemRenderer = contents1.getJSONObject(f)
+ .getJSONObject("musicResponsiveListItemRenderer");
+
+ String thumbnail1 = getCovertUrl(musicResponsiveListItemRenderer.getJSONObject("thumbnail"), true);
+
+ JSONArray flexColumns = musicResponsiveListItemRenderer.getJSONArray("flexColumns");
+
+ String songName = "";
+ String singerName = "";
+ String playCount = "";
+ String videoId = "";
+ String playLIstId = "";
+ for (int b = 0; b < flexColumns.length(); b++) {
+ JSONObject jsonObject1 = flexColumns.getJSONObject(b)
+ .getJSONObject("musicResponsiveListItemFlexColumnRenderer")
+ .getJSONObject("text");
+
+ switch (b) {
+ case 0:
+ songName = getJsonTitle(jsonObject1, 0);
+ String[] watchEndPoint = getWatchEndPoint(jsonObject1.getJSONArray("runs").getJSONObject(0));
+ videoId = watchEndPoint[0];
+ playLIstId = watchEndPoint[1];
+ break;
+ case 1:
+ singerName = getJsonTitle(jsonObject1, 0);
+ break;
+ case 2:
+ playCount = getJsonTitle(jsonObject1, 0);
+ break;
+ }
+ }
+
+ responseResultListChild.setThumbnail(thumbnail1);
+ responseResultListChild.setSongName(songName);
+ responseResultListChild.setSubTitle(singerName);
+ responseResultListChild.setPlayCount(playCount);
+ responseResultListChild.setVideoId(videoId);
+ responseResultListChild.setPlayListId(playLIstId);
+
+ childList.add(responseResultListChild);
+ }
+ } else if (musicCarouselShelfRenderer != null) {
+ String headerTitle = getJsonTitle(musicCarouselShelfRenderer.getJSONObject("header")
+ .getJSONObject("musicCarouselShelfBasicHeaderRenderer")
+ .getJSONObject("title"),0);
+ resultList.setHeaderTitle(headerTitle);
+
+ JSONArray contents1 = musicCarouselShelfRenderer.getJSONArray("contents");
+ for (int f = 0; f < contents1.length(); f++) {
+ ResponseResultListChild responseResultListChild = new ResponseResultListChild();
+
+ JSONObject musicTwoRowItemRenderer = contents1.getJSONObject(f)
+ .getJSONObject("musicTwoRowItemRenderer");
+
+ String thumbnail1 = getCovertUrl(musicTwoRowItemRenderer.getJSONObject("thumbnailRenderer"), true);
+
+ JSONObject title = musicTwoRowItemRenderer.getJSONObject("title");
+ String albumName = getJsonTitle(title, 0);
+
+ String[] browser = getBrowser(title.getJSONArray("runs").getJSONObject(0));
+ String subtitle = getJsonTextNew(musicTwoRowItemRenderer.getJSONObject("subtitle"));
+
+ if(browser!= null){
+ String browserId = browser[0];
+ responseResultListChild.setBrowserId(browserId);
+ }
+ responseResultListChild.setThumbnail(thumbnail1);
+ responseResultListChild.setSongName(albumName);
+ responseResultListChild.setSubTitle(subtitle);
+ childList.add(responseResultListChild);
+ }
+ }
+ resultList.setChildList(childList);
+ list.add(resultList);
+ }
+ responseResult.setList(list);
+
+ }
+ CommonUtils.LogMsg("-- responseResult=" + responseResult);
+ return responseResult;
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -562,13 +842,6 @@ public class JsonHelper {
.getJSONObject("browseEndpoint");
}
-
-// else if (subtitle.has("navigationEndpoint")) {
-// //-------------当pageType="MUSIC_PAGE_TYPE_ARTIST" 走这里
-// browseEndpoint = subtitle.getJSONObject("navigationEndpoint")
-// .getJSONObject("browseEndpoint");
-// // browsID = UCTruu07wXSulRSQ2sOPR5mQ
-// }
if (browseEndpoint != null) {
browseId = browseEndpoint
.getString("browseId");
@@ -630,7 +903,11 @@ public class JsonHelper {
String[] strings = new String[4];
try {
- JSONObject watchEndpoint = job.getJSONObject("navigationEndpoint").getJSONObject("watchEndpoint");
+ JSONObject navigationEndpoint = job.optJSONObject("navigationEndpoint");
+ if (navigationEndpoint == null) {
+ return strings;
+ }
+ JSONObject watchEndpoint = navigationEndpoint.getJSONObject("watchEndpoint");
if (watchEndpoint.has("videoId")) {
strings[0] = watchEndpoint.getString("videoId");
}
@@ -643,12 +920,7 @@ public class JsonHelper {
if (watchEndpoint.has("watchEndpointMusicSupportedConfigs")) {
strings[3] = watchEndpoint.getJSONObject("watchEndpointMusicSupportedConfigs").getJSONObject("watchEndpointMusicConfig").getString("musicVideoType");
}
-// String videoId = watchEndpoint.getString("videoId");
-// String playlistId = watchEndpoint.getString("playlistId");
-// String params = watchEndpoint.getString("params");
-// String musicVideoType = watchEndpoint.getJSONObject("watchEndpointMusicSupportedConfigs")
-// .getJSONObject("watchEndpointMusicConfig")
-// .getString("musicVideoType");
+
} catch (JSONException exception) {
exception.printStackTrace();
}
@@ -695,6 +967,24 @@ public class JsonHelper {
}
+ private static String[] getBrowser(JSONObject jsonObject) throws JSONException {
+
+ String[] strings = new String[2];
+ JSONObject navigationEndpoint = jsonObject.optJSONObject("navigationEndpoint");
+ if (navigationEndpoint != null) {
+
+ JSONObject browseEndpoint = navigationEndpoint.optJSONObject("browseEndpoint");
+ if (browseEndpoint == null) return null;
+ strings[0] = browseEndpoint.getString("browseId");
+
+ strings[1] = browseEndpoint.getJSONObject("browseEndpointContextSupportedConfigs")
+ .getJSONObject("browseEndpointContextMusicConfig")
+ .getString("pageType");
+ return strings;
+ }
+ return null;
+ }
+
private static String getJsonTitle(JSONObject jsonObject, int index) {
String text = "";
try {
diff --git a/app/src/main/java/com/hi/music/player/network/MusicApi.java b/app/src/main/java/com/hi/music/player/network/MusicApi.java
index 3c99056..16cb04d 100644
--- a/app/src/main/java/com/hi/music/player/network/MusicApi.java
+++ b/app/src/main/java/com/hi/music/player/network/MusicApi.java
@@ -35,14 +35,14 @@ public interface MusicApi {
// X-Goog-FieldMask: contents.singleColumnMusicWatchNextResultsRenderer.tabbedRenderer.watchNextTabbedResultsRenderer.tabs.tabRenderer.content.musicQueueRenderer.content.playlistPanelRenderer(continuations,contents(automixPreviewVideoRenderer,playlistPanelVideoRenderer(title,navigationEndpoint,longBylineText,shortBylineText,thumbnail,lengthText)))
- //获取播放列表
+ //获取播放列表(返回的是每首歌曲详情列表)
@POST("youtubei/v1/next?prettyPrint=false")
@Headers("X-Goog-Api-Key:AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8")
Observable getMusicPlayPage(@Header("X-Goog-FieldMask") String customHeader, @Body RequestBody requestBody);
- //获取播放音频资源url
+ //获取播放音频资源url "X-Goog-Api-Key:AIzaSyC9XL3ZjwddXya6X74dJOCTL-WEYFDNX30"
@POST("youtubei/v1/player?prettyPrint=false")
@Headers({"X-Goog-Api-Key:AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
"X-Goog-FieldMask:playabilityStatus.status,playerConfig.audioConfig,streamingData.adaptiveFormats,videoDetails.videoId,videoDetails.thumbnail"})
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 76948a8..b9ff6ff 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
@@ -1,6 +1,7 @@
package com.hi.music.player.network;
import com.google.gson.Gson;
+import com.hi.music.player.MusicApplication;
import com.hi.music.player.api.RequestListener;
import com.hi.music.player.javabean.requestbody.BodyHome;
import com.hi.music.player.javabean.requestbody.BodyPlay;
@@ -134,10 +135,13 @@ public class RetrofitManager {
BodyPlayUrl bodyPlay = new BodyPlayUrl();
bodyPlay.setVideoId(videoId);
Client client = bodyPlay.getContext().getClient();
- client.setClientName("ANDROID_MUSIC");
- client.setClientVersion("5.28.1");
- client.setPlatform("MOBILE");
- bodyPlay.getContext().getThirdParty().setEmbedUrl("https://www.youtube.com/watch?v=" + videoId);
+ client.setClientName("ANDROID");
+ client.setClientVersion("19.05.36");
+ client.setPlatform("DESKTOP");
+ String visitorData = MusicApplication.getVisitorData();
+// client.setVisitorData("CgtWN1RXaURPN3LNZyiZK9e4BjIKCgJVUXIEGgAgPW%3D%3D");
+ client.setVisitorData(visitorData);
+ bodyPlay.getContext().getThirdParty().setEmbedUrl("https://www.youtube.com/watch?v="+videoId);
Gson gson = new Gson();
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 5dc58af..f06e671 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
@@ -59,6 +59,7 @@ public class CategoryListActivity extends BaseActivity() {
@Override
public void onChanged(ResponseCategoryList responseCategoryList) {
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 394529e..3f00c41 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
@@ -9,6 +9,7 @@ import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.SeekBar;
+import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -33,6 +34,7 @@ import com.hi.music.player.R;
import com.hi.music.player.adapter.AdapterPlayList;
import com.hi.music.player.api.MediaControllerListener;
import com.hi.music.player.api.onImageColorListener;
+import com.hi.music.player.api.onPlayNextListener;
import com.hi.music.player.databinding.ActivityPlayBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
@@ -57,12 +59,11 @@ public class PlayActivity extends BaseActivity implements S
// private VMApplication vmApplication;
- //接口返回的播放列表(没有音频数据)
- private List mPlayList;
+
private ResponsePlayUrl mCurPlayInfo;
- private ResponsePlayListInfo musicInfo;
+
private Handler mHandler;
private Runnable mRunnable;
// private MyMediaControllerManager mediaControllerManager;
@@ -127,6 +128,7 @@ public class PlayActivity extends BaseActivity implements S
videoId = responseSingle.getVideoId();
params = responseSingle.getParams();
musicVideoType = responseSingle.getMusicVideoType();
+ mDefaultPlayStartIndex = intent.getIntExtra(MyValue.KEY_PLAY_ACTIVITY_CATEGORY_LIST_INDEX, mDefaultPlayStartIndex);
vmPlay.getPlayMusicList(playlistId, videoId, params, musicVideoType);
vmPlay.playList.observe(this, new Observer>() {
@Override
@@ -215,8 +217,6 @@ 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);
}
@@ -480,7 +480,14 @@ public class PlayActivity extends BaseActivity implements S
mediaControllerManager.pause();
}
} else if (v.equals(vb.btnNext)) {
- mediaControllerManager.playNext();
+ mediaControllerManager.playNext(new onPlayNextListener() {
+ @Override
+ public void onPlayNext(boolean hasNext) {
+ if(!hasNext){
+ Toast.makeText(PlayActivity.this,getString(R.string.no_next_song_yet),Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
} else if (v.equals(vb.btnPrevious)) {
mediaControllerManager.playPrevious();
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/ResultListActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/ResultListActivity.java
new file mode 100644
index 0000000..e8729d9
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/ui/activity/ResultListActivity.java
@@ -0,0 +1,133 @@
+package com.hi.music.player.ui.activity;
+
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.lifecycle.Observer;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.Target;
+import com.hi.music.player.MusicApplication;
+import com.hi.music.player.R;
+import com.hi.music.player.adapter.AdapterResult;
+import com.hi.music.player.api.HomeItemClickListener;
+import com.hi.music.player.databinding.ActivityResultListBinding;
+import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.helper.MyValue;
+import com.hi.music.player.javabean.response.ResponseResult;
+import com.hi.music.player.javabean.response.child.ResponseResultListChild;
+import com.hi.music.player.javabean.response.child.ResponseSingle;
+import com.hi.music.player.ui.fragmnt.viewmodel.VMCategoryList;
+import com.hi.music.player.ui.fragmnt.viewmodel.VMResultList;
+
+public class ResultListActivity extends BaseActivity implements HomeItemClickListener {
+ private VMResultList vm;
+
+ @Override
+ protected ActivityResultListBinding getViewBinding() {
+ return ActivityResultListBinding.inflate(getLayoutInflater());
+ }
+
+ @Override
+ protected void onCreateInit() {
+ vm = getActivityScopeViewModel(VMResultList.class);
+ String key = getIntent().getStringExtra("key");
+ vm.getList(key);
+
+ vm.data.observe(this, new Observer() {
+ @Override
+ public void onChanged(ResponseResult responseResult) {
+ if(responseResult == null){
+
+ return;
+ }
+ loadInfo(responseResult);
+ }
+ });
+
+ }
+
+ private void loadInfo(ResponseResult result){
+ Glide.with(this)
+ .asDrawable()
+ .load(result.getMainCovert())
+ .apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(4))))
+ .placeholder(R.drawable.placeholder)
+ .listener(new RequestListener() {
+ @Override
+ public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) {
+ CommonUtils.LogMsg(e.getMessage());
+ return false;
+ }
+
+ @Override
+ public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) {
+ return false;
+ }
+ })
+ .into(vb.covert);
+ vb.mainTitle.setText(result.getMainTitle());
+ AdapterResult adapterResult = new AdapterResult();
+ adapterResult.setHomeItemClickListener(this);
+ adapterResult.setData(result.getList());
+ vb.listRecycler.setAdapter(adapterResult);
+ vb.listRecycler.setLayoutManager(new LinearLayoutManager(this));
+ }
+
+ @Override
+ protected void onInitClick() {
+
+ }
+
+ @Override
+ public boolean isFullScreen() {
+ return true;
+ }
+
+ @Override
+ public boolean statusBarLight() {
+ return false;
+ }
+
+ @Override
+ public boolean showPanel() {
+ return true;
+ }
+
+ @Override
+ public void onClick(View v) {
+
+ }
+
+ @Override
+ public void onClickResultSong(ResponseResultListChild child,int index) {
+ ResponseSingle responseSingle = new ResponseSingle();
+ responseSingle.setSongTitle(child.getSongName());
+ responseSingle.setSingerHead(child.getThumbnail());
+ responseSingle.setVideoId(child.getVideoId());
+ responseSingle.setPlaylistId(child.getPlayListId());
+ Intent intent = new Intent(this, PlayActivity.class);
+ intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_SINGER, responseSingle);
+ intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_CATEGORY_LIST_INDEX,index);
+ CommonUtils.LogMsg("-------------index="+index);
+ startActivity(intent);
+ }
+
+ @Override
+ public void onClickResultAlbum(ResponseResultListChild child, int index) {
+ Intent intent = new Intent(this, CategoryListActivity.class);
+// intent.putExtra(MyValue.KEY_CATEGORY_LIST_TYPE, pageType);
+ intent.putExtra(MyValue.KEY_CATEGORY_LIST_SINGER_NAME, child.getSongName());
+ intent.putExtra(MyValue.KEY_CATEGORY_LIST_BROWSER_ID, child.getBrowserId());
+ startActivity(intent);
+ }
+}
\ No newline at end of file
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 d592f8c..ac72077 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
@@ -121,6 +121,8 @@ public class HomeFragment extends BaseFragment implements H
FragmentActivity activity = getActivity();
if(activity!= null){
String pageType = data.getPageType();
+ String browseId = data.getBrowseId();
+ String twoSubtitle = data.getTwoSubtitle();
if(pageType.equals(MyValue.PAGE_TYPE_MV)){
Intent intent = new Intent(activity, PlayActivity.class);
intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_MV, data);
@@ -128,11 +130,15 @@ public class HomeFragment extends BaseFragment implements H
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);
+ intent.putExtra(MyValue.KEY_CATEGORY_LIST_TYPE, pageType);
+ intent.putExtra(MyValue.KEY_CATEGORY_LIST_SINGER_NAME, twoSubtitle);
+ intent.putExtra(MyValue.KEY_CATEGORY_LIST_BROWSER_ID, browseId);
startActivity(intent);
}else {
Intent intent = new Intent(activity, CategoryListActivity.class);
- intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_CATEGORY, data);
+ intent.putExtra(MyValue.KEY_CATEGORY_LIST_TYPE, pageType);
+ intent.putExtra(MyValue.KEY_CATEGORY_LIST_SINGER_NAME, twoSubtitle);
+ intent.putExtra(MyValue.KEY_CATEGORY_LIST_BROWSER_ID, browseId);
startActivity(intent);
}
diff --git a/app/src/main/java/com/hi/music/player/ui/fragmnt/SearchFragment.java b/app/src/main/java/com/hi/music/player/ui/fragmnt/SearchFragment.java
index 98ca447..29d804e 100644
--- a/app/src/main/java/com/hi/music/player/ui/fragmnt/SearchFragment.java
+++ b/app/src/main/java/com/hi/music/player/ui/fragmnt/SearchFragment.java
@@ -1,5 +1,6 @@
package com.hi.music.player.ui.fragmnt;
+import android.content.Intent;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
@@ -10,10 +11,18 @@ import android.widget.TextView;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
+import com.hi.music.player.adapter.AdapterSearch;
import com.hi.music.player.adapter.AdapterSuggestion;
import com.hi.music.player.api.HomeItemClickListener;
import com.hi.music.player.databinding.FragmentSearchBinding;
import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.helper.MyValue;
+import com.hi.music.player.javabean.response.ResponseSearch;
+import com.hi.music.player.javabean.response.child.ResponseSearchChild;
+import com.hi.music.player.javabean.response.child.ResponseSingle;
+import com.hi.music.player.ui.activity.CategoryListActivity;
+import com.hi.music.player.ui.activity.PlayActivity;
+import com.hi.music.player.ui.activity.ResultListActivity;
import com.hi.music.player.ui.fragmnt.viewmodel.VMSearch;
import java.util.List;
@@ -67,6 +76,8 @@ public class SearchFragment extends BaseFragment implemen
}
});
initSuggestionRecycler();
+ initResultRecycler();
+
}
private void initSuggestionRecycler() {
@@ -87,6 +98,24 @@ public class SearchFragment extends BaseFragment implemen
});
}
+
+ private void initResultRecycler(){
+ AdapterSearch adapterSearch = new AdapterSearch();
+ adapterSearch.setHomeItemClickListener(this);
+ Vb.recyclerResult.setLayoutManager(new LinearLayoutManager(requireContext()));
+ Vb.recyclerResult.setAdapter(adapterSearch);
+ vmSearch.result.observe(getViewLifecycleOwner(), new Observer>() {
+ @Override
+ public void onChanged(List responseSearches) {
+ if(responseSearches == null){
+ CommonUtils.LogMsg("------------更新结果 null");
+ return;
+ }
+ adapterSearch.setData(responseSearches);
+ }
+ });
+ }
+
private void startQuery(String query){
Vb.recyclerSuggestion.setVisibility(View.GONE);
Vb.recyclerResult.setVisibility(View.VISIBLE);
@@ -109,4 +138,75 @@ public class SearchFragment extends BaseFragment implemen
Vb.etSearch.setText("");
}
}
+
+
+ //点击搜索结果的play按钮
+ @Override
+ public void onClickSearchResultBest(ResponseSearch responseSearch) {
+ String beastBrowserId = responseSearch.getBeastBrowserId();
+ String beastVideoId = responseSearch.getBeastVideoId();
+ String beastSongTitle = responseSearch.getBeastSongTitle();
+ String beastSongTCovert = responseSearch.getBeastSongTCovert();
+
+ if(beastBrowserId!= null&&!beastBrowserId.isEmpty()){
+ Intent intent = new Intent(requireActivity(), ResultListActivity.class);
+ intent.putExtra("key", beastBrowserId);
+ startActivity(intent);
+ }else {
+ CommonUtils.LogMsg("---------击搜索结果的play按钮--beastVideoId="+beastVideoId);
+
+ ResponseSingle responseSingle = new ResponseSingle();
+ responseSingle.setSongTitle(beastSongTitle);
+ responseSingle.setSingerHead(beastSongTCovert);
+ responseSingle.setVideoId(beastVideoId);
+ responseSingle.setPlaylistId("");
+ Intent intent = new Intent(requireActivity(), PlayActivity.class);
+ intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_SINGER, responseSingle);
+ startActivity(intent);
+ }
+ }
+
+
+ //点击搜索结果普通项
+ @Override
+ public void onClickSearchResult(ResponseSearchChild responseSearchChild) {
+ String browserId = responseSearchChild.getBrowserId();
+ String songVideoId = responseSearchChild.getSongVideoId();
+ String songCovert = responseSearchChild.getSongCovert();
+ String songTitle = responseSearchChild.getSongTitle();
+ String songDescribe = responseSearchChild.getSongDescribe();
+
+ if(browserId!= null&&!browserId.isEmpty()){
+
+
+ String pageType = responseSearchChild.getPageType();
+ CommonUtils.LogMsg("---------点击搜索结果--pageType="+pageType);
+ switch (pageType){
+ case "MUSIC_PAGE_TYPE_ARTIST":
+ Intent intent = new Intent(requireActivity(), ResultListActivity.class);
+ intent.putExtra("key", browserId);
+ startActivity(intent);
+ break;
+ default:
+ Intent intent1 = new Intent(requireActivity(), CategoryListActivity.class);
+ intent1.putExtra(MyValue.KEY_CATEGORY_LIST_TYPE, pageType);
+ intent1.putExtra(MyValue.KEY_CATEGORY_LIST_SINGER_NAME, songDescribe);
+ intent1.putExtra(MyValue.KEY_CATEGORY_LIST_BROWSER_ID, browserId);
+ startActivity(intent1);
+ break;
+ }
+
+ }else {
+ CommonUtils.LogMsg("---------点击搜索结果--VideoId="+songVideoId);
+
+ ResponseSingle responseSingle = new ResponseSingle();
+ responseSingle.setSongTitle(songTitle);
+ responseSingle.setSingerHead(songCovert);
+ responseSingle.setVideoId(songVideoId);
+ responseSingle.setPlaylistId("");
+ Intent intent = new Intent(requireActivity(), PlayActivity.class);
+ intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_SINGER, responseSingle);
+ startActivity(intent);
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMHome.java b/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMHome.java
index f849e38..4c77133 100644
--- a/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMHome.java
+++ b/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMHome.java
@@ -4,8 +4,10 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
+import com.hi.music.player.MusicApplication;
import com.hi.music.player.api.RequestListener;
import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponseHome;
import com.hi.music.player.network.JsonHelper;
import com.hi.music.player.network.RetrofitManager;
@@ -39,6 +41,7 @@ public class VMHome extends ViewModel {
continuation = responseHome.getContinuation();
clickTrackingParams = responseHome.getClickTrackingParams();
visitorData = responseHome.getVisitorData();
+ MusicApplication.setVisitorData(visitorData);
_data.setValue(responseHome);
} else {
_data.setValue(null);
diff --git a/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMResultList.java b/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMResultList.java
new file mode 100644
index 0000000..707c39b
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMResultList.java
@@ -0,0 +1,39 @@
+package com.hi.music.player.ui.fragmnt.viewmodel;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.ViewModel;
+
+import com.hi.music.player.api.RequestListener;
+import com.hi.music.player.javabean.response.ResponseCategoryList;
+import com.hi.music.player.javabean.response.ResponseResult;
+import com.hi.music.player.network.JsonHelper;
+import com.hi.music.player.network.RetrofitManager;
+
+import org.json.JSONObject;
+
+import okhttp3.ResponseBody;
+
+public class VMResultList extends ViewModel {
+ private MutableLiveData _data = new MutableLiveData<>();
+ public LiveData data = _data;
+
+
+ public void getList(String browseId) {
+
+ RetrofitManager.getInstance().getCategoryList(browseId, new RequestListener() {
+ @Override
+ public void onFail(String errorMsg) {
+ _data.setValue(null);
+ }
+
+ @Override
+ public void onSuccess(JSONObject data) {
+ if (data != null) {
+ ResponseResult responseResult = JsonHelper.ResolveSearchResultList(data);
+ _data.setValue(responseResult);
+ }
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMSearch.java b/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMSearch.java
index 968c00e..e8602b6 100644
--- a/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMSearch.java
+++ b/app/src/main/java/com/hi/music/player/ui/fragmnt/viewmodel/VMSearch.java
@@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModel;
import com.hi.music.player.api.RequestListener;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.response.ResponseHome;
+import com.hi.music.player.javabean.response.ResponseSearch;
import com.hi.music.player.network.JsonHelper;
import com.hi.music.player.network.RetrofitManager;
@@ -19,6 +20,10 @@ import okhttp3.ResponseBody;
public class VMSearch extends ViewModel {
private MutableLiveData> _suggestion = new MutableLiveData>();
public LiveData> suggestion = _suggestion;
+
+
+ private MutableLiveData> _result= new MutableLiveData>();
+ public LiveData> result = _result;
public void getSuggestion(String input) {
RetrofitManager.getInstance().getSearchSuggestion(input,new RequestListener() {
@@ -47,16 +52,16 @@ public class VMSearch extends ViewModel {
@Override
public void onFail(String errorMsg) {
-// _data.setValue(null);
+ _result.setValue(null);
}
@Override
public void onSuccess(JSONObject data) {
if (data != null) {
- JsonHelper.ResolveSearchResult(data);
-// _data.setValue(responseHome);
+ List responseSearches = JsonHelper.ResolveSearchResult(data);
+ _result.setValue(responseSearches);
} else {
-// _data.setValue(null);
+ _result.setValue(null);
}
}
diff --git a/app/src/main/res/drawable/bg_best_bg.xml b/app/src/main/res/drawable/bg_best_bg.xml
new file mode 100644
index 0000000..7ecac2d
--- /dev/null
+++ b/app/src/main/res/drawable/bg_best_bg.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_search_result_play.xml b/app/src/main/res/drawable/bg_search_result_play.xml
new file mode 100644
index 0000000..1ad57c2
--- /dev/null
+++ b/app/src/main/res/drawable/bg_search_result_play.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/panel_play.xml b/app/src/main/res/drawable/panel_play.xml
new file mode 100644
index 0000000..4fae939
--- /dev/null
+++ b/app/src/main/res/drawable/panel_play.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/selector_panel_play.xml b/app/src/main/res/drawable/selector_panel_play.xml
index 937493c..3dc1e8e 100644
--- a/app/src/main/res/drawable/selector_panel_play.xml
+++ b/app/src/main/res/drawable/selector_panel_play.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/layout/activity_result_list.xml b/app/src/main/res/layout/activity_result_list.xml
new file mode 100644
index 0000000..c7d17da
--- /dev/null
+++ b/app/src/main/res/layout/activity_result_list.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_result.xml b/app/src/main/res/layout/item_result.xml
new file mode 100644
index 0000000..899b382
--- /dev/null
+++ b/app/src/main/res/layout/item_result.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_result_list_album.xml b/app/src/main/res/layout/item_result_list_album.xml
new file mode 100644
index 0000000..fd651f9
--- /dev/null
+++ b/app/src/main/res/layout/item_result_list_album.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_result_list_song.xml b/app/src/main/res/layout/item_result_list_song.xml
new file mode 100644
index 0000000..82c1923
--- /dev/null
+++ b/app/src/main/res/layout/item_result_list_song.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_search.xml b/app/src/main/res/layout/item_search.xml
new file mode 100644
index 0000000..3505172
--- /dev/null
+++ b/app/src/main/res/layout/item_search.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_search_child.xml b/app/src/main/res/layout/item_search_child.xml
new file mode 100644
index 0000000..843fcd9
--- /dev/null
+++ b/app/src/main/res/layout/item_search_child.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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
index 9624187..90497de 100644
--- a/app/src/main/res/layout/layout_panel.xml
+++ b/app/src/main/res/layout/layout_panel.xml
@@ -57,8 +57,8 @@
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 4f4a203..3abf103 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -18,4 +18,5 @@
#99000000
#000000
#2D9C31
+ #282A2C
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c9c6ad8..62e8e77 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -25,4 +25,6 @@
Try again
An error occurred
Search songs, artists…
+ Play
+ There is no next song yet
\ No newline at end of file