diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 1d78d73..69d6e47 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -51,9 +51,14 @@ dependencies {
implementation("com.squareup.retrofit2:adapter-rxjava2:2.9.0")
implementation("io.reactivex.rxjava2:rxjava:2.2.21")
implementation("io.reactivex.rxjava2:rxandroid:2.1.1")
- implementation ("com.squareup.okhttp3:logging-interceptor:4.11.0")
+ implementation("com.squareup.okhttp3:logging-interceptor:4.11.0")
- implementation ("androidx.paging:paging-runtime-ktx:3.3.2")
+ implementation("androidx.paging:paging-runtime-ktx:3.3.2")
implementation("com.github.bumptech.glide:glide:4.16.0")
+
+ //----------media3
+ implementation("androidx.media3:media3-exoplayer:1.4.1")
+ implementation("androidx.media3:media3-session:1.4.1")
+ //----------media3
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 14816a1..9a244d2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">
+
-
-
+ android:exported="true" >
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterCategory.java b/app/src/main/java/com/hi/music/player/adapter/AdapterCategory.java
index bb0d8e1..4a5d1ac 100644
--- a/app/src/main/java/com/hi/music/player/adapter/AdapterCategory.java
+++ b/app/src/main/java/com/hi/music/player/adapter/AdapterCategory.java
@@ -2,7 +2,6 @@ package com.hi.music.player.adapter;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
-import android.view.RoundedCorner;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
@@ -19,11 +18,8 @@ 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.ItemCategoryBinding;
-import com.hi.music.player.databinding.ItemHomeBinding;
-import com.hi.music.player.databinding.ItemSingerBinding;
import com.hi.music.player.helper.CommonUtils;
-import com.hi.music.player.javabean.response.ResponseCategory;
-import com.hi.music.player.javabean.response.ResponseSingle;
+import com.hi.music.player.javabean.response.child.ResponseCategory;
public class AdapterCategory extends BaseAdapter{
diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterHome.java b/app/src/main/java/com/hi/music/player/adapter/AdapterHome.java
index ab1f56a..176dba8 100644
--- a/app/src/main/java/com/hi/music/player/adapter/AdapterHome.java
+++ b/app/src/main/java/com/hi/music/player/adapter/AdapterHome.java
@@ -11,13 +11,12 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.hi.music.player.MusicApplication;
-import com.hi.music.player.api.ClickSingerListener;
import com.hi.music.player.databinding.ItemFooterLoadingBinding;
import com.hi.music.player.databinding.ItemHomeBinding;
import com.hi.music.player.helper.CommonUtils;
-import com.hi.music.player.javabean.response.ResponseCategory;
-import com.hi.music.player.javabean.response.ResponseHomeChild;
-import com.hi.music.player.javabean.response.ResponseSingle;
+import com.hi.music.player.javabean.response.child.ResponseCategory;
+import com.hi.music.player.javabean.response.child.ResponseHomeChild;
+import com.hi.music.player.javabean.response.child.ResponseSingle;
import java.util.List;
diff --git a/app/src/main/java/com/hi/music/player/adapter/AdapterSinger.java b/app/src/main/java/com/hi/music/player/adapter/AdapterSinger.java
index 3849b14..d23dbf8 100644
--- a/app/src/main/java/com/hi/music/player/adapter/AdapterSinger.java
+++ b/app/src/main/java/com/hi/music/player/adapter/AdapterSinger.java
@@ -1,6 +1,5 @@
package com.hi.music.player.adapter;
-import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
@@ -19,12 +18,9 @@ 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.ItemCategoryBinding;
-import com.hi.music.player.databinding.ItemHomeBinding;
import com.hi.music.player.databinding.ItemSingerBinding;
import com.hi.music.player.helper.CommonUtils;
-import com.hi.music.player.javabean.response.ResponseHomeChild;
-import com.hi.music.player.javabean.response.ResponseSingle;
+import com.hi.music.player.javabean.response.child.ResponseSingle;
public class AdapterSinger extends BaseAdapter {
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 2d14a45..8e2a417 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
@@ -9,7 +9,7 @@ import androidx.viewbinding.ViewBinding;
import com.hi.music.player.api.ClickSingerListener;
import com.hi.music.player.databinding.ItemFooterLoadingBinding;
-import com.hi.music.player.javabean.response.ResponseSingle;
+import com.hi.music.player.javabean.response.child.ResponseSingle;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/com/hi/music/player/helper/CommonUtils.java b/app/src/main/java/com/hi/music/player/helper/CommonUtils.java
index 117e100..b96d329 100644
--- a/app/src/main/java/com/hi/music/player/helper/CommonUtils.java
+++ b/app/src/main/java/com/hi/music/player/helper/CommonUtils.java
@@ -17,11 +17,15 @@ public class CommonUtils {
private static String TAG = "----MUSIC---------";
+ private static String TAG_ERROR = "----ERROR MUSIC---------";
+
public static void LogMsg(String msg) {
Log.d(TAG, msg);
}
-
+ public static void LogErrorMsg(String msg) {
+ Log.e(TAG_ERROR, msg);
+ }
public static JSONObject toJsonObject(ResponseBody body) {
try {
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/ResponseHome.java b/app/src/main/java/com/hi/music/player/javabean/response/ResponseHome.java
index 00a4a57..329f59a 100644
--- a/app/src/main/java/com/hi/music/player/javabean/response/ResponseHome.java
+++ b/app/src/main/java/com/hi/music/player/javabean/response/ResponseHome.java
@@ -2,6 +2,8 @@ package com.hi.music.player.javabean.response;
import androidx.annotation.Nullable;
+import com.hi.music.player.javabean.response.child.ResponseHomeChild;
+
import java.util.List;
public class ResponseHome {
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/ResponsePlay.java b/app/src/main/java/com/hi/music/player/javabean/response/ResponsePlay.java
new file mode 100644
index 0000000..1329845
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/javabean/response/ResponsePlay.java
@@ -0,0 +1,108 @@
+package com.hi.music.player.javabean.response;
+
+public class ResponsePlay {
+
+ //封面
+ private String covert;
+ //歌曲名字
+ private String SongTitle;
+
+ //歌手名字
+ private String SingerName;
+
+ //专辑名称
+ private String AlbumTitle;
+
+ //发行年份
+ private String Year;
+
+ //歌曲时长
+ private String Duration;
+
+
+ private String videoId;
+ private String playlistId;
+ private String params;
+ private String musicVideoType;
+
+
+ public String getDuration() {
+ return Duration;
+ }
+
+ public void setDuration(String duration) {
+ Duration = duration;
+ }
+
+ public String getCovert() {
+ return covert;
+ }
+
+ public void setCovert(String covert) {
+ this.covert = covert;
+ }
+
+ public String getSongTitle() {
+ return SongTitle;
+ }
+
+ public void setSongTitle(String songTitle) {
+ SongTitle = songTitle;
+ }
+
+ public String getSingerName() {
+ return SingerName;
+ }
+
+ public void setSingerName(String singerName) {
+ SingerName = singerName;
+ }
+
+ public String getAlbumTitle() {
+ return AlbumTitle;
+ }
+
+ public void setAlbumTitle(String albumTitle) {
+ AlbumTitle = albumTitle;
+ }
+
+ public String getYear() {
+ return Year;
+ }
+
+ public void setYear(String year) {
+ Year = year;
+ }
+
+ 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;
+ }
+
+ public String getParams() {
+ return params;
+ }
+
+ public void setParams(String params) {
+ this.params = params;
+ }
+
+ public String getMusicVideoType() {
+ return musicVideoType;
+ }
+
+ public void setMusicVideoType(String musicVideoType) {
+ this.musicVideoType = musicVideoType;
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/ResponseCategory.java b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseCategory.java
similarity index 92%
rename from app/src/main/java/com/hi/music/player/javabean/response/ResponseCategory.java
rename to app/src/main/java/com/hi/music/player/javabean/response/child/ResponseCategory.java
index ba2b2c9..049234c 100644
--- a/app/src/main/java/com/hi/music/player/javabean/response/ResponseCategory.java
+++ b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseCategory.java
@@ -1,4 +1,4 @@
-package com.hi.music.player.javabean.response;
+package com.hi.music.player.javabean.response.child;
public class ResponseCategory {
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/ResponseHomeChild.java b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseHomeChild.java
similarity index 93%
rename from app/src/main/java/com/hi/music/player/javabean/response/ResponseHomeChild.java
rename to app/src/main/java/com/hi/music/player/javabean/response/child/ResponseHomeChild.java
index 3c01e6f..948cb31 100644
--- a/app/src/main/java/com/hi/music/player/javabean/response/ResponseHomeChild.java
+++ b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseHomeChild.java
@@ -1,4 +1,4 @@
-package com.hi.music.player.javabean.response;
+package com.hi.music.player.javabean.response.child;
import java.util.List;
diff --git a/app/src/main/java/com/hi/music/player/javabean/response/ResponseSingle.java b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseSingle.java
similarity index 96%
rename from app/src/main/java/com/hi/music/player/javabean/response/ResponseSingle.java
rename to app/src/main/java/com/hi/music/player/javabean/response/child/ResponseSingle.java
index 06d2858..7f02462 100644
--- a/app/src/main/java/com/hi/music/player/javabean/response/ResponseSingle.java
+++ b/app/src/main/java/com/hi/music/player/javabean/response/child/ResponseSingle.java
@@ -1,4 +1,4 @@
-package com.hi.music.player.javabean.response;
+package com.hi.music.player.javabean.response.child;
import java.io.Serializable;
diff --git a/app/src/main/java/com/hi/music/player/media3/MyMediaController.java b/app/src/main/java/com/hi/music/player/media3/MyMediaController.java
new file mode 100644
index 0000000..e1fb097
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/media3/MyMediaController.java
@@ -0,0 +1,56 @@
+package com.hi.music.player.media3;
+
+import android.content.ComponentName;
+
+import androidx.media3.common.MediaItem;
+import androidx.media3.session.MediaController;
+import androidx.media3.session.SessionToken;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.hi.music.player.MusicApplication;
+import com.hi.music.player.helper.CommonUtils;
+import com.hi.music.player.network.RetrofitManager;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+
+public class MyMediaController {
+
+ private static volatile MyMediaController MyMediaControllerInstance;
+
+ private MediaController mediaController;
+ public static MyMediaController getInstance() {
+ if (MyMediaControllerInstance == null) {
+ synchronized (RetrofitManager.class) {
+ if (MyMediaControllerInstance == null) {
+ MyMediaControllerInstance = new MyMediaController();
+ }
+ }
+ }
+ return MyMediaControllerInstance;
+ }
+
+ private void init(){
+ SessionToken sessionToken =
+ new SessionToken(MusicApplication.myApplication, new ComponentName(MusicApplication.myApplication, PlaybackService.class));
+ ListenableFuture controllerFuture =
+ new MediaController.Builder(MusicApplication.myApplication, sessionToken).buildAsync();
+ controllerFuture.addListener(() -> {
+ // Call controllerFuture.get() to retrieve the MediaController.
+ // MediaController implements the Player interface, so it can be
+ // attached to the PlayerView UI component.
+// playerView.setPlayer(controllerFuture.get());
+ try {
+ mediaController = controllerFuture.get();
+ } catch (ExecutionException | InterruptedException e) {
+ CommonUtils.LogErrorMsg(e.getMessage());
+ }
+ }, MoreExecutors.directExecutor());
+
+
+ List mediaItems = new ArrayList<>();
+ mediaController.addMediaItems(mediaItems);
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/media3/PlaybackService.java b/app/src/main/java/com/hi/music/player/media3/PlaybackService.java
new file mode 100644
index 0000000..a98d95f
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/media3/PlaybackService.java
@@ -0,0 +1,32 @@
+package com.hi.music.player.media3;
+
+import androidx.annotation.Nullable;
+import androidx.media3.exoplayer.ExoPlayer;
+import androidx.media3.session.MediaSession;
+import androidx.media3.session.MediaSessionService;
+
+public class PlaybackService extends MediaSessionService {
+ private MediaSession mediaSession = null;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ ExoPlayer player = new ExoPlayer.Builder(this).build();
+ mediaSession = new MediaSession.Builder(this, player).build();
+ }
+
+
+
+ @Nullable
+ @Override
+ public MediaSession onGetSession(MediaSession.ControllerInfo controllerInfo) {
+ return mediaSession;
+ }
+
+ @Override
+ public void onDestroy() {
+ mediaSession.getPlayer().release();
+ mediaSession.release();
+ mediaSession = null;
+ super.onDestroy();
+ }
+}
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 ff09ab6..9a0dc8f 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
@@ -1,16 +1,18 @@
package com.hi.music.player.network;
import com.hi.music.player.helper.CommonUtils;
-import com.hi.music.player.javabean.response.ResponseCategory;
+import com.hi.music.player.javabean.response.ResponsePlay;
+import com.hi.music.player.javabean.response.child.ResponseCategory;
import com.hi.music.player.javabean.response.ResponseHome;
-import com.hi.music.player.javabean.response.ResponseHomeChild;
-import com.hi.music.player.javabean.response.ResponseSingle;
+import com.hi.music.player.javabean.response.child.ResponseHomeChild;
+import com.hi.music.player.javabean.response.child.ResponseSingle;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
public class JsonHelper {
@@ -76,6 +78,65 @@ public class JsonHelper {
}
+ public static List ResolvePlayJson(JSONObject jsonObject) {
+ List list = new ArrayList<>();
+ try {
+ JSONObject playlistPanelRenderer = jsonObject.getJSONObject("contents")
+ .getJSONObject("singleColumnMusicWatchNextResultsRenderer")
+ .getJSONObject("tabbedRenderer")
+ .getJSONObject("watchNextTabbedResultsRenderer")
+ .getJSONArray("tabs")
+ .getJSONObject(0)
+ .getJSONObject("tabRenderer")
+ .getJSONObject("content")
+ .getJSONObject("musicQueueRenderer")
+ .getJSONObject("content")
+ .getJSONObject("playlistPanelRenderer");
+
+ JSONArray contents = playlistPanelRenderer.getJSONArray("contents");
+
+ for (int i = 0; i < contents.length(); i++) {
+ ResponsePlay responsePlay = new ResponsePlay();
+ JSONObject playlistPanelVideoRenderer = contents.getJSONObject(i)
+ .getJSONObject("playlistPanelVideoRenderer");
+
+ String jsonUrl = getJsonUrl(playlistPanelVideoRenderer);
+ String songName = getJsonTitle(playlistPanelVideoRenderer.getJSONObject("title"), 0);
+
+ JSONObject longBylineText = playlistPanelVideoRenderer.getJSONObject("longBylineText");
+ String singerName = getJsonTitle(longBylineText, 0);
+ String AlbumTitle = getJsonTitle(longBylineText, 2);
+ String YearRelease = getJsonTitle(longBylineText, 4);
+
+ String SongDuration = getJsonTitle(playlistPanelVideoRenderer.getJSONObject("lengthText"), 0);
+
+ String[] watchEndPoint = getWatchEndPoint(playlistPanelVideoRenderer);
+
+ responsePlay.setCovert(jsonUrl);
+ responsePlay.setSongTitle(songName);
+ responsePlay.setSingerName(singerName);
+ responsePlay.setAlbumTitle(AlbumTitle);
+ responsePlay.setYear(YearRelease);
+ responsePlay.setDuration(SongDuration);
+ responsePlay.setVideoId(watchEndPoint[0]);
+ responsePlay.setPlaylistId(watchEndPoint[1]);
+ responsePlay.setParams(watchEndPoint[2]);
+ responsePlay.setMusicVideoType(watchEndPoint[3]);
+
+ list.add(responsePlay);
+ CommonUtils.LogMsg("----------歌曲名字=" + songName + "---" + Arrays.toString(watchEndPoint));
+ }
+
+
+ } catch (JSONException exception) {
+ CommonUtils.LogMsg("----------exception=");
+ exception.printStackTrace();
+
+ }
+ return list;
+ }
+
+
private static void getCommonHome(JSONObject sectionListRenderer, ResponseHome responseHome) throws JSONException {
@@ -106,10 +167,10 @@ public class JsonHelper {
if (musicCarouselShelfRenderer != null) {
//模块标题
- String title = getJsonText(musicCarouselShelfRenderer
+ String title = getJsonTitle(musicCarouselShelfRenderer
.getJSONObject("header")
.getJSONObject("musicCarouselShelfBasicHeaderRenderer")
- .getJSONObject("title"));
+ .getJSONObject("title"), 0);
CommonUtils.LogMsg("----------headertitle=" + title);
responseHomeChild.setHeaderTitle(title);
JSONArray childContents = musicCarouselShelfRenderer
@@ -139,25 +200,19 @@ public class JsonHelper {
.getJSONObject(g)
.getJSONObject("musicResponsiveListItemFlexColumnRenderer")
.getJSONObject("text");
- String text = getJsonText(jsonObject);
+ String text = getJsonTitle(jsonObject, 0);
if (g == 0) {
SongTitle = text;
- JSONObject watchEndpoint = jsonObject.getJSONArray("runs")
- .getJSONObject(0)
- .getJSONObject("navigationEndpoint")
- .getJSONObject("watchEndpoint");
- String videoId = watchEndpoint.getString("videoId");
- String playlistId = watchEndpoint.getString("playlistId");
- String params = watchEndpoint.getString("params");
- String musicVideoType = watchEndpoint.getJSONObject("watchEndpointMusicSupportedConfigs")
- .getJSONObject("watchEndpointMusicConfig")
- .getString("musicVideoType");
+ JSONObject runs = jsonObject.getJSONArray("runs")
+ .getJSONObject(0);
- responseSingle.setVideoId(videoId);
- responseSingle.setPlaylistId(playlistId);
- responseSingle.setParams(params);
- responseSingle.setMusicVideoType(musicVideoType);
+ String[] watchEndPoint = getWatchEndPoint(runs);
+
+ responseSingle.setVideoId(watchEndPoint[0]);
+ responseSingle.setPlaylistId(watchEndPoint[1]);
+ responseSingle.setParams(watchEndPoint[2]);
+ responseSingle.setMusicVideoType(watchEndPoint[3]);
}
if (g == 1) SingerName = text;
@@ -178,7 +233,7 @@ public class JsonHelper {
.getJSONObject("thumbnailRenderer"));
JSONObject title1 = musicTwoRowItemRenderer.getJSONObject("title");
- String twoTitle = getJsonText(title1);
+ String twoTitle = getJsonTitle(title1, 0);
String twoSubtitle = getJsonTextNew(musicTwoRowItemRenderer.getJSONObject("subtitle"));
// String pageType = title1.getJSONObject("navigationEndpoint")
// .getJSONObject("browseEndpoint")
@@ -190,7 +245,7 @@ public class JsonHelper {
responseCategory.setTwoTitle(twoTitle);
responseCategory.setTwoSubtitle(twoSubtitle);
categoryList.add(responseCategory);
- CommonUtils.LogMsg(" ----------2222222222----twoTitle=" + twoTitle + "-twoSubtitle=" + twoSubtitle );
+ CommonUtils.LogMsg(" ----------2222222222----twoTitle=" + twoTitle + "-twoSubtitle=" + twoSubtitle);
}
}
@@ -204,12 +259,50 @@ public class JsonHelper {
}
+
+ private static String[] getWatchEndPoint(JSONObject job) {
+
+ String[] strings = new String[4];
+ try {
+ JSONObject watchEndpoint = job
+ .getJSONObject("navigationEndpoint")
+ .getJSONObject("watchEndpoint");
+ if (watchEndpoint.has("videoId")) {
+ strings[0] = watchEndpoint.getString("videoId");
+ }
+ if (watchEndpoint.has("playlistId")) {
+ strings[1] = watchEndpoint.getString("playlistId");
+ }
+ if (watchEndpoint.has("params")) {
+ strings[2] = watchEndpoint.getString("params");
+ }
+ 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();
+ }
+ return strings;
+ }
+
+ //取最大的一张图片
private static String getJsonUrl(JSONObject jsonObject) {
try {
- JSONArray jsonArray = jsonObject.getJSONObject("musicThumbnailRenderer")
+ boolean b = jsonObject.has("musicThumbnailRenderer");
+ if (b) {
+ jsonObject = jsonObject.getJSONObject("musicThumbnailRenderer");
+ }
+ JSONArray jsonArray = jsonObject
.getJSONObject("thumbnail")
.getJSONArray("thumbnails");
-
int length = jsonArray.length();
CommonUtils.LogMsg("----------length=" + (length - 1));
String pngUrl = jsonArray.getJSONObject(length - 1)
@@ -222,24 +315,28 @@ public class JsonHelper {
}
- private static String getJsonText(JSONObject jsonObject) {
+ private static String getJsonTitle(JSONObject jsonObject, int index) {
+ String text = "";
try {
- String text = jsonObject.getJSONArray("runs")
- .getJSONObject(0)
- .getString("text");
+ JSONArray runs = jsonObject.getJSONArray("runs");
+ if (index < runs.length()) {
+ text = runs
+ .getJSONObject(index)
+ .getString("text");
+ }
- return text;
} catch (JSONException exception) {
- return "";
+ exception.printStackTrace();
}
+ return text;
}
private static String getJsonTextNew(JSONObject jsonObject) {
- StringBuilder text= new StringBuilder();
+ StringBuilder text = new StringBuilder();
try {
JSONArray runs = jsonObject.getJSONArray("runs");
- for (int i =0;i {
@@ -24,17 +48,58 @@ public class PlayActivity extends BaseActivity {
Intent intent = getIntent();
responseSingle = (ResponseSingle) intent.getSerializableExtra(MyValue.KEY_PLAY_ACTIVITY_SINGER);
vmPlay = getActivityScopeViewModel(VMPlay.class);
+ vmPlay.getPlay(responseSingle);
-
- vb.btn.setOnClickListener(new View.OnClickListener() {
+ vmPlay.data.observe(this, new Observer>() {
@Override
- public void onClick(View v) {
- vmPlay.getPlay(responseSingle);
+ public void onChanged(List playList) {
+ if (playList.size() > 0) {
+ ResponsePlay responsePlay = playList.get(0);
+ loadCovert(responsePlay.getCovert());
+ loadInfo(responsePlay);
+
+ }
+
}
});
}
+ private void loadInfo(ResponsePlay data) {
+ vb.tvSongName.setText(data.getSongTitle());
+ vb.tvSingerName.setText(data.getSingerName());
+ vb.tvDuration.setText(data.getDuration());
+ }
+
+ private void loadCovert(String url) {
+ Glide.with(MusicApplication.myApplication)
+ .asDrawable()
+ .apply(RequestOptions.bitmapTransform(new RoundedCorners(CommonUtils.dpToPx(16))))
+ .load(url)
+ .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;
+ }
+
+ @Override
+ public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) {
+ return false;
+ }
+ })
+ .into(vb.imCovert);
+ }
+
+
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ }
+
@Override
public boolean isFullScreen() {
return false;
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMPlay.java b/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMPlay.java
index b3a3d63..a44db91 100644
--- a/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMPlay.java
+++ b/app/src/main/java/com/hi/music/player/ui/activity/viewmodel/VMPlay.java
@@ -7,19 +7,22 @@ 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.ResponseSingle;
+import com.hi.music.player.javabean.response.ResponsePlay;
+import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.hi.music.player.network.JsonHelper;
import com.hi.music.player.network.RetrofitManager;
import org.json.JSONObject;
+import java.util.List;
+
import okhttp3.ResponseBody;
public class VMPlay extends ViewModel {
- private MutableLiveData _data = new MutableLiveData();
- public LiveData data = _data;
+ private MutableLiveData> _data = new MutableLiveData>();
+ public LiveData> data = _data;
private String continuation, clickTrackingParams, visitorData;
@@ -29,7 +32,7 @@ public class VMPlay extends ViewModel {
String params = responseSingle.getParams();
String musicVideoType = responseSingle.getMusicVideoType();
- RetrofitManager.getInstance().getNext(params,playlistId,videoId,musicVideoType,new RequestListener() {
+ RetrofitManager.getInstance().getNext(params, playlistId, videoId, musicVideoType, new RequestListener() {
@Override
public void onFail(String errorMsg) {
@@ -40,9 +43,8 @@ public class VMPlay extends ViewModel {
public void onSuccess(ResponseBody data) {
JSONObject jsonObject = CommonUtils.toJsonObject(data);
if (jsonObject != null) {
-
-
-// _data.setValue(responseHome);
+ List responsePlays = JsonHelper.ResolvePlayJson(jsonObject);
+ _data.setValue(responsePlays);
} else {
_data.setValue(null);
}
@@ -52,6 +54,4 @@ public class VMPlay extends ViewModel {
}
-
-
}
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 cabc50b..b5e18e3 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
@@ -8,15 +8,14 @@ import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import com.hi.music.player.R;
import com.hi.music.player.adapter.AdapterHome;
import com.hi.music.player.api.ClickSingerListener;
import com.hi.music.player.databinding.FragmentHomeBinding;
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.javabean.response.ResponseHomeChild;
-import com.hi.music.player.javabean.response.ResponseSingle;
+import com.hi.music.player.javabean.response.child.ResponseHomeChild;
+import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.hi.music.player.ui.activity.PlayActivity;
import com.hi.music.player.ui.fragmnt.viewmodel.VMHome;
diff --git a/app/src/main/res/drawable/arrow_bottom.xml b/app/src/main/res/drawable/arrow_bottom.xml
new file mode 100644
index 0000000..352178a
--- /dev/null
+++ b/app/src/main/res/drawable/arrow_bottom.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/seekbar_progress_drawable.xml b/app/src/main/res/drawable/seekbar_progress_drawable.xml
new file mode 100644
index 0000000..287af61
--- /dev/null
+++ b/app/src/main/res/drawable/seekbar_progress_drawable.xml
@@ -0,0 +1,18 @@
+
+
+
+-
+
+
+
+
+
+-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/seekbar_thumb.xml b/app/src/main/res/drawable/seekbar_thumb.xml
new file mode 100644
index 0000000..104bb46
--- /dev/null
+++ b/app/src/main/res/drawable/seekbar_thumb.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_icon_play.xml b/app/src/main/res/drawable/selector_icon_play.xml
new file mode 100644
index 0000000..496cccb
--- /dev/null
+++ b/app/src/main/res/drawable/selector_icon_play.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_play.xml b/app/src/main/res/layout/activity_play.xml
index ff165a0..3259cd2 100644
--- a/app/src/main/res/layout/activity_play.xml
+++ b/app/src/main/res/layout/activity_play.xml
@@ -4,14 +4,131 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="@color/black"
tools:context=".ui.activity.PlayActivity">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_list.png b/app/src/main/res/mipmap-xxxhdpi/icon_list.png
new file mode 100644
index 0000000..a20815f
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_list.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_next_true.png b/app/src/main/res/mipmap-xxxhdpi/icon_next_true.png
new file mode 100644
index 0000000..a80f392
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_next_true.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_pause.png b/app/src/main/res/mipmap-xxxhdpi/icon_pause.png
new file mode 100644
index 0000000..2f201b4
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_pause.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_play.png b/app/src/main/res/mipmap-xxxhdpi/icon_play.png
new file mode 100644
index 0000000..28f7350
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_play.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_previous_true.png b/app/src/main/res/mipmap-xxxhdpi/icon_previous_true.png
new file mode 100644
index 0000000..dd03f15
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_previous_true.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 53ea26b..27d027b 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,6 +2,10 @@
#FF000000
#FFFFFFFF
+ #00000000
#FFFFFF
#DFD0D0
+
+ #4DFFFFFF
+ #99FFFFFF
\ No newline at end of file