diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 8d9d4c6..fc08a5d 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,10 +1,14 @@
+import java.util.Date
+import java.text.SimpleDateFormat
plugins {
id("com.android.application")
// id("org.jetbrains.kotlin.android")
// id ("kotlin-kapt")
id("io.objectbox")
+ id("com.google.gms.google-services")
+ id("com.google.firebase.crashlytics")
}
-
+val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
android {
namespace = "com.hi.music.player"
compileSdk = 34
@@ -16,13 +20,13 @@ android {
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
-
+ setProperty("archivesBaseName", "MusicApp_V" + versionName + "(${versionCode})_$timestamp")
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
- isMinifyEnabled = false
+ isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
@@ -38,6 +42,7 @@ android {
}
buildFeatures {
viewBinding = true
+ buildConfig = true
}
}
@@ -85,4 +90,11 @@ dependencies {
// implementation ("com.geyifeng.immersionbar:immersionbar:3.2.2")
// implementation ("com.geyifeng.immersionbar:immersionbar-components:3.2.2")
+
+
+ //------------------firebase
+ implementation(platform("com.google.firebase:firebase-bom:33.1.1"))
+ implementation("com.google.firebase:firebase-crashlytics")
+ implementation("com.google.firebase:firebase-analytics")
+ implementation("com.google.firebase:firebase-config")
}
\ No newline at end of file
diff --git a/app/google-services.json b/app/google-services.json
new file mode 100644
index 0000000..63b1faa
--- /dev/null
+++ b/app/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "550960818622",
+ "project_id": "himelody-and",
+ "storage_bucket": "himelody-and.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:550960818622:android:96fd4141e43410fb24f1ef",
+ "android_client_info": {
+ "package_name": "com.hi.music.player.test"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCp3XR60onMqiGj9pD8ADmrDEOOn__sQDk"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 481bb43..de1b277 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -18,4 +18,12 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
-#-renamesourcefileattribute SourceFile
\ No newline at end of file
+#-renamesourcefileattribute SourceFile
+
+# Retrofit 和 OkHttp 的混淆规则
+-dontwarn okhttp3.**
+-dontwarn okio.**
+-keep class okhttp3.** { *; }
+-keep class retrofit2.** { *; }
+-dontwarn retrofit2.**
+-dontwarn javax.annotation.Nullable
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5ddf8e3..e4f72e1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -25,18 +25,23 @@
tools:targetApi="31">
+ android:screenOrientation="portrait"
+ android:exported="false">
+
+
+
-
pair:status){
if(pair.second.equals(videoId)){
diff --git a/app/src/main/java/com/hi/music/player/firebase/RemoteConfig.kt b/app/src/main/java/com/hi/music/player/firebase/RemoteConfig.kt
new file mode 100644
index 0000000..08a6aba
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/firebase/RemoteConfig.kt
@@ -0,0 +1,151 @@
+package com.hi.music.player.firebase
+
+import android.annotation.SuppressLint
+import android.app.Application
+import android.content.Context
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import android.text.TextUtils
+import android.util.Log
+import com.google.firebase.remoteconfig.ConfigUpdate
+import com.google.firebase.remoteconfig.ConfigUpdateListener
+import com.google.firebase.remoteconfig.FirebaseRemoteConfig
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigException
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue
+import com.hi.music.player.BuildConfig
+import com.hi.music.player.helper.CommonUtils
+
+
+import java.lang.ref.WeakReference
+
+
+class RemoteConfig {
+
+ private var ctx: Context? = null
+ private var mFirebaseRemoteConfig: FirebaseRemoteConfig? = null
+
+ //配置是否初始化成功
+ private var isInit = false
+
+ //上次获取数据的时间
+ private var lastFetchTime: Long = 0
+ private val handler = MHandler(this)
+
+
+ companion object {
+
+ const val key_open_type = "TYPE"
+
+ //进入A面
+ const val value_open_type_0 = "0"
+ //进入B面
+ const val value_open_type_1 = "1"
+
+
+ const val MSG_REFRESH_CONFIG = 1
+ val instance: RemoteConfig by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ RemoteConfig()
+ }
+ }
+
+ fun init(ctx: Application) {
+ this.ctx = ctx
+ initConfig()
+ fetchConfig()
+ onConfigUpdate()
+ }
+
+ private fun initConfig() {
+ var intervalTime = (60 * 10).toLong()
+ //如果是开发状态,则将提取时间缩短
+ if (BuildConfig.DEBUG) {
+ intervalTime = (60 * 5).toLong()
+ }
+ mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance()
+ val configSettings =
+ FirebaseRemoteConfigSettings.Builder() //默认值12小时的最短提取间隔,如果在间隔内取值,则优先取上次的结果
+ .setMinimumFetchIntervalInSeconds(intervalTime).build()
+ mFirebaseRemoteConfig!!.setConfigSettingsAsync(configSettings)
+ }
+
+ private fun onConfigUpdate() {
+ mFirebaseRemoteConfig!!.addOnConfigUpdateListener(object : ConfigUpdateListener {
+ override fun onUpdate(configUpdate: ConfigUpdate) {
+
+ CommonUtils.LogMsg("Updated keys: " + configUpdate.updatedKeys)
+ try {
+ mFirebaseRemoteConfig!!.activate().addOnCompleteListener { task ->
+ if (task.isSuccessful) {
+ updateData("onConfigUpdate", mFirebaseRemoteConfig!!.all)
+ }
+ }
+ } catch (ignore: Exception) {
+ }
+ }
+
+ override fun onError(error: FirebaseRemoteConfigException) {
+ CommonUtils.LogMsg("Config update error with code: " + error.code)
+ }
+ })
+ }
+
+ private fun fetchConfig() {
+ //这里可能会抛出异常 FirebaseRemoteConfigFetchThrottledException
+ try {
+ mFirebaseRemoteConfig!!.fetchAndActivate().addOnCompleteListener { task ->
+ if (task.isSuccessful) {
+ isInit = true
+ lastFetchTime = System.currentTimeMillis()
+ updateData("fetchAndActivate", mFirebaseRemoteConfig!!.all)
+ //24小时后,重新再去获取
+ handler.removeMessages(MSG_REFRESH_CONFIG)
+ handler.sendEmptyMessageDelayed(
+ MSG_REFRESH_CONFIG, (1000 * 60 * 60 * 24).toLong()
+ )
+ } else {
+ //15分钟后重新再去获取
+ handler.removeMessages(MSG_REFRESH_CONFIG)
+ handler.sendEmptyMessageDelayed(MSG_REFRESH_CONFIG, (1000 * 60 * 15).toLong())
+ }
+ }
+ } catch (ignore: Exception) {
+ }
+ }
+
+ private fun updateData(from: String, all: Map) {
+ for ((key, value) in all) {
+ try {
+ CommonUtils.LogMsg( "from = " + from + "Key = " + key + " Value = " + value.asString()
+ )
+ if (TextUtils.equals(key_open_type, key)) {
+ Sp.getInstance()
+ .putStringValue(key_open_type, value.asString()).commit()
+ }
+
+ } catch (ignore: Exception) {
+
+ }
+ }
+ }
+
+ private class MHandler(remoteConfig: RemoteConfig) : Handler(Looper.getMainLooper()) {
+ private val weakReference: WeakReference
+
+ init {
+ weakReference = WeakReference(remoteConfig)
+ }
+
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val remoteConfig = weakReference.get()
+ if (remoteConfig?.ctx != null) {
+ if (msg.what == MSG_REFRESH_CONFIG) {
+ remoteConfig.fetchConfig()
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/hi/music/player/firebase/RemoteConfigJava.java b/app/src/main/java/com/hi/music/player/firebase/RemoteConfigJava.java
new file mode 100644
index 0000000..c2ea2ac
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/firebase/RemoteConfigJava.java
@@ -0,0 +1,167 @@
+package com.hi.music.player.firebase;
+
+import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.BuildConfig;
+import com.google.firebase.remoteconfig.ConfigUpdate;
+import com.google.firebase.remoteconfig.ConfigUpdateListener;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigException;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue;
+import com.hi.music.player.helper.CommonUtils;
+
+import java.lang.ref.WeakReference;
+import java.util.Map;
+
+public class RemoteConfigJava {
+
+ private static RemoteConfigJava remoteConfigJava;
+ public static String key_open_type = "TYPE";
+
+ //进入A面
+ public static String value_open_type_0 = "0";
+ //进入B面
+ public static String value_open_type_1 = "1";
+
+
+ private static int MSG_REFRESH_CONFIG = 1;
+
+
+ private Context ctx;
+ private FirebaseRemoteConfig mFirebaseRemoteConfig;
+
+ //配置是否初始化成功
+ private boolean isInit = false;
+
+ //上次获取数据的时间
+ private long lastFetchTime = 0;
+ private MHandler handler = new MHandler(this);
+
+
+ private Context getCtx() {
+ return ctx;
+ }
+
+ public static RemoteConfigJava getInstance(){
+ if(remoteConfigJava == null){
+ remoteConfigJava = new RemoteConfigJava();
+ }
+ return remoteConfigJava;
+ }
+ private static class MHandler extends Handler {
+ private WeakReference weakReference;
+
+
+ public MHandler(RemoteConfigJava remoteConfig) {
+ super(Looper.getMainLooper());
+ weakReference = new WeakReference<>(remoteConfig);
+ }
+
+ @Override
+ public void handleMessage(@NonNull Message msg) {
+ super.handleMessage(msg);
+
+ RemoteConfigJava remoteConfig1 = weakReference.get();
+ if (remoteConfig1.getCtx() != null) {
+ if (msg.what == MSG_REFRESH_CONFIG) {
+ remoteConfig1.fetchConfig();
+ }
+ }
+ }
+ }
+
+ public void init(Context context) {
+ this.ctx = context;
+ initConfig();
+ fetchConfig();
+ onConfigUpdate();
+ }
+
+ private void initConfig() {
+ long intervalTime = 60L * 10L;
+ //如果是开发状态,则将提取时间缩短
+ if (BuildConfig.DEBUG) {
+ intervalTime = 60L * 5L;
+ }
+ mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
+ FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() //默认值12小时的最短提取间隔,如果在间隔内取值,则优先取上次的结果
+ .setMinimumFetchIntervalInSeconds(intervalTime).build();
+ mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
+ }
+
+ private void onConfigUpdate() {
+ mFirebaseRemoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() {
+ @Override
+ public void onUpdate(@NonNull ConfigUpdate configUpdate) {
+ CommonUtils.LogMsg("Updated keys: " + configUpdate.getUpdatedKeys());
+ try {
+ mFirebaseRemoteConfig.activate().addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ updateData("onConfigUpdate", mFirebaseRemoteConfig.getAll());
+ }
+ }
+ });
+ } catch (Exception ignore) {
+ CommonUtils.LogErrorMsg("onConfigUpdate Exception " + ignore.getMessage());
+ }
+ }
+
+ @Override
+ public void onError(@NonNull FirebaseRemoteConfigException error) {
+ CommonUtils.LogErrorMsg("onConfigUpdate onError " + error.getMessage());
+ }
+ });
+ }
+
+ private void fetchConfig() {
+ //这里可能会抛出异常 FirebaseRemoteConfigFetchThrottledException
+ try {
+ mFirebaseRemoteConfig.fetchAndActivate().addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ isInit = true;
+ lastFetchTime = System.currentTimeMillis();
+ updateData("fetchAndActivate", mFirebaseRemoteConfig.getAll());
+ //24小时后,重新再去获取
+ handler.removeMessages(MSG_REFRESH_CONFIG);
+ handler.sendEmptyMessageDelayed(
+ MSG_REFRESH_CONFIG, 1000 * 60 * 60 * 24L);
+ } else {
+ //15分钟后重新再去获取
+ handler.removeMessages(MSG_REFRESH_CONFIG);
+ handler.sendEmptyMessageDelayed(MSG_REFRESH_CONFIG, 1000 * 60 * 15L);
+ }
+
+ }
+ });
+ } catch (Exception exception) {
+ CommonUtils.LogErrorMsg(" exception = " + exception.getMessage());
+ }
+ }
+
+
+ private void updateData(String from, Map all) {
+ for (Map.Entry entry : all.entrySet()) {
+ FirebaseRemoteConfigValue value = entry.getValue();
+ String key = entry.getKey();
+ CommonUtils.LogMsg("from = " + from + "Key = " + key + " Value = " + value.asString());
+
+ if (TextUtils.equals(key_open_type, key)) {
+ Sp.getInstance()
+ .putStringValue(key_open_type, value.asString()).commit();
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/firebase/Sp.java b/app/src/main/java/com/hi/music/player/firebase/Sp.java
new file mode 100644
index 0000000..c0662eb
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/firebase/Sp.java
@@ -0,0 +1,44 @@
+package com.hi.music.player.firebase;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+
+
+public class Sp {
+
+ private static String spName = "AD_SHOW";
+ private static Sp instance;
+ private SharedPreferences.Editor editor;
+
+ private SharedPreferences preferences;
+
+ private Sp(Context context) {
+ preferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
+ editor = preferences.edit();
+
+ }
+
+
+ public static void init(Context context){
+ instance = new Sp(context);
+ }
+
+ public static Sp getInstance() {
+ return instance;
+ }
+
+
+ public Sp putStringValue(String key, String value) {
+ editor.putString(key, value);
+ return this;
+ }
+
+ public boolean commit() {
+ return editor.commit();
+ }
+
+ public String getStringValue(String key) {
+ return preferences.getString(key, RemoteConfigJava.value_open_type_1);
+ }
+}
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 d9c30a2..efbd2ca 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
@@ -496,15 +496,6 @@ public class JsonHelper {
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();
@@ -716,6 +707,8 @@ public class JsonHelper {
.getJSONObject("musicResponsiveListItemFlexColumnRenderer")
.getJSONObject("text");
String text = getJsonTitle(jsonObjectText, 0);
+
+ CommonUtils.LogMsg("---------g=" + g + "---text="+text);
if (g == 0) {
SongTitle = text;
@@ -733,8 +726,12 @@ public class JsonHelper {
listInfo.setMusicVideoType(watchEndPoint[3]);
}
- if (g == 1) SingerName = text;
- if (g == 2) Description = text;
+ if (g == 1){
+ SingerName = text;
+ }
+ if (g == 2) {
+ Description = text;
+ }
}
listInfo.setDescribe(Description);
listInfo.setDuration(textTime);
@@ -810,7 +807,9 @@ public class JsonHelper {
responseSingle.setMusicVideoType(watchEndPoint[3]);
}
- if (g == 1) SingerName = text;
+ if (g == 1) {
+ SingerName = text;
+ }
if (g == 2) {
//这里应该没有值
Description = text;
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/A_SplashActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/A_SplashActivity.java
index b7bb82b..8f435f8 100644
--- a/app/src/main/java/com/hi/music/player/ui/activity/A_SplashActivity.java
+++ b/app/src/main/java/com/hi/music/player/ui/activity/A_SplashActivity.java
@@ -5,6 +5,8 @@ import android.os.CountDownTimer;
import android.view.View;
import com.hi.music.player.databinding.ActivityAsplashBinding;
+import com.hi.music.player.firebase.RemoteConfigJava;
+import com.hi.music.player.firebase.Sp;
public class A_SplashActivity extends BaseActivity {
@@ -60,9 +62,7 @@ public class A_SplashActivity extends BaseActivity {
@Override
public void onFinish() {
vb.progressBar.setProgress(100);
- Intent intent = new Intent(A_SplashActivity.this, A_HomeActivity.class);
- startActivity(intent);
- finish();
+ enterHome();
}
};
@@ -74,4 +74,17 @@ public class A_SplashActivity extends BaseActivity {
public void onClick(View v) {
}
+
+ private void enterHome(){
+ String stringValue = Sp.getInstance().getStringValue(RemoteConfigJava.key_open_type);
+ Intent intent;
+ if(stringValue.equals(RemoteConfigJava.value_open_type_0)){
+ intent = new Intent(A_SplashActivity.this, A_HomeActivity.class);
+ }else {
+ intent = new Intent(A_SplashActivity.this, HomeActivity.class);
+ }
+ startActivity(intent);
+ finish();
+
+ }
}
\ No newline at end of file
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 ea11627..cec1af3 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
@@ -206,7 +206,7 @@ public class CategoryListActivity extends BaseActivity() {
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/LikeSongActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/LikeSongActivity.java
index 4b594f3..3425e08 100644
--- a/app/src/main/java/com/hi/music/player/ui/activity/LikeSongActivity.java
+++ b/app/src/main/java/com/hi/music/player/ui/activity/LikeSongActivity.java
@@ -111,7 +111,7 @@ public class LikeSongActivity extends BaseActivity impl
@Override
public boolean showPanel() {
- return false;
+ return true;
}
@Override
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
index d4aa873..9d95fb3 100644
--- 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
@@ -31,6 +31,7 @@ import com.hi.music.player.ui.fragmnt.viewmodel.VMResultList;
public class ResultListActivity extends BaseActivity implements HomeItemClickListener {
private VMResultList vm;
+ private String key;
@Override
protected ActivityResultListBinding getViewBinding() {
@@ -40,23 +41,25 @@ public class ResultListActivity extends BaseActivity
@Override
protected void onCreateInit() {
vm = getActivityScopeViewModel(VMResultList.class);
- String key = getIntent().getStringExtra(MyValue.KEY_SEARCH_RESULT_BROWSER_ID);
+ key = getIntent().getStringExtra(MyValue.KEY_SEARCH_RESULT_BROWSER_ID);
vm.getList(key);
vm.data.observe(this, new Observer() {
@Override
public void onChanged(ResponseResult responseResult) {
- if(responseResult == null){
-
+ vb.pbLoading.setVisibility(View.GONE);
+ if (responseResult == null) {
+ vb.layoutError.linearRetry.setVisibility(View.VISIBLE);
return;
}
+ vb.pbLoading.setVisibility(View.GONE);
loadInfo(responseResult);
}
});
}
- private void loadInfo(ResponseResult result){
+ private void loadInfo(ResponseResult result) {
Glide.with(this)
.asDrawable()
.load(result.getMainCovert())
@@ -86,6 +89,7 @@ public class ResultListActivity extends BaseActivity
@Override
protected void onInitClick() {
vb.imBack.setOnClickListener(this);
+ vb.layoutError.tvRetry.setOnClickListener(this);
}
@Override
@@ -105,14 +109,16 @@ public class ResultListActivity extends BaseActivity
@Override
public void onClick(View v) {
- if(v.equals(vb.imBack)){
+ if (v.equals(vb.imBack)) {
finish();
+ } else if (v.equals(vb.layoutError.tvRetry)) {
+ vm.getList(key);
}
}
@Override
- public void onClickResultSong(ResponseResultListChild child,int index) {
+ public void onClickResultSong(ResponseResultListChild child, int index) {
String videoId = child.getVideoId();
String playListId = child.getPlayListId();
String browserId = child.getBrowserId();
@@ -121,7 +127,7 @@ public class ResultListActivity extends BaseActivity
String songName = child.getSongName();
String subTitle = child.getSubTitle();
- if(videoId!= null&&!videoId.isEmpty()){
+ if (videoId != null && !videoId.isEmpty()) {
ResponseSingle responseSingle = new ResponseSingle();
responseSingle.setSongTitle(songName);
responseSingle.setSingerHead(thumbnail);
@@ -129,14 +135,14 @@ public class ResultListActivity extends BaseActivity
responseSingle.setPlaylistId(playListId);
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);
+ intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_CATEGORY_LIST_INDEX, index);
+ CommonUtils.LogMsg("-------------index=" + index);
startActivity(intent);
- }else {
- switch (pageType){
+ } else {
+ switch (pageType) {
case "MUSIC_PAGE_TYPE_ALBUM":
//专辑
- CommonUtils.LogMsg("------------专辑-index="+index+"--subTitle="+subTitle);
+ CommonUtils.LogMsg("------------专辑-index=" + index + "--subTitle=" + subTitle);
case "MUSIC_PAGE_TYPE_PLAYLIST":
//精选
Intent intent1 = new Intent(this, CategoryListActivity.class);
@@ -158,7 +164,6 @@ public class ResultListActivity extends BaseActivity
}
-
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_category_list.xml b/app/src/main/res/layout/activity_category_list.xml
index 86404f6..7bdbaa3 100644
--- a/app/src/main/res/layout/activity_category_list.xml
+++ b/app/src/main/res/layout/activity_category_list.xml
@@ -38,17 +38,26 @@
android:layout_height="wrap_content"
android:layout_marginTop="77dp">
-
+
+
+
+
+ android:layout_gravity="center"
+ android:layout_marginBottom="80dp" />
diff --git a/app/src/main/res/layout/activity_like_song.xml b/app/src/main/res/layout/activity_like_song.xml
index fc7d440..15ff86b 100644
--- a/app/src/main/res/layout/activity_like_song.xml
+++ b/app/src/main/res/layout/activity_like_song.xml
@@ -36,7 +36,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
- android:layout_marginTop="40dp"
+ android:layout_marginTop="20dp"
android:text="@string/like_song"
android:textColor="@color/white"
android:textSize="17sp"
@@ -46,8 +46,11 @@
diff --git a/app/src/main/res/layout/activity_play.xml b/app/src/main/res/layout/activity_play.xml
index 9e16f0a..73fe61a 100644
--- a/app/src/main/res/layout/activity_play.xml
+++ b/app/src/main/res/layout/activity_play.xml
@@ -1,303 +1,307 @@
-
-
-
+
+ tools:context=".ui.activity.PlayActivity">
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent"
+ android:background="@drawable/black_gradient" />
-
+
+
+
+
-
+ app:layout_constraintTop_toBottomOf="@id/im_back">
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ android:background="@drawable/bg_like_layout"
+ android:orientation="horizontal"
+ android:paddingStart="22dp"
+ android:paddingEnd="22dp"
+ app:layout_constraintLeft_toRightOf="@id/layout_like"
+ app:layout_constraintTop_toTopOf="@id/layout_like">
-
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_result_list.xml b/app/src/main/res/layout/activity_result_list.xml
index 1425267..6c41e37 100644
--- a/app/src/main/res/layout/activity_result_list.xml
+++ b/app/src/main/res/layout/activity_result_list.xml
@@ -3,8 +3,9 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:background="@color/black"
+ android:fillViewport="true"
tools:context=".ui.activity.ResultListActivity">
-
-
-
-
+ android:layout_height="280dp"
+ app:layout_constraintTop_toTopOf="parent">
-
-
+
-
+
+
+
+
+
+ android:orientation="vertical"
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_profile.xml b/app/src/main/res/layout/fragment_profile.xml
index 9742f61..ca87d63 100644
--- a/app/src/main/res/layout/fragment_profile.xml
+++ b/app/src/main/res/layout/fragment_profile.xml
@@ -33,6 +33,7 @@
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="16dp"
+ android:visibility="gone"
android:src="@drawable/ic_launcher_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -68,6 +69,14 @@
android:layout_height="match_parent"
android:scaleType="centerCrop" />
+
+
+
+
@@ -134,6 +145,14 @@
android:layout_centerInParent="true"
android:scaleType="centerCrop" />
+
+
@@ -66,6 +68,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
+ android:maxLines="1"
+ android:ellipsize="end"
android:textColor="@color/white_60_color"
android:textSize="12sp" />
diff --git a/app/src/main/res/layout/item_like_song.xml b/app/src/main/res/layout/item_like_song.xml
index b7a946c..9a79e03 100644
--- a/app/src/main/res/layout/item_like_song.xml
+++ b/app/src/main/res/layout/item_like_song.xml
@@ -2,9 +2,8 @@
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp">
@@ -37,7 +38,9 @@
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/like_song"
+ android:text="@string/app_name"
+ android:maxLines="1"
+ android:ellipsize="end"
android:textColor="@color/white"
android:textSize="14sp" />
@@ -46,21 +49,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
- android:text="@string/like_song"
+ android:text="@string/app_name"
+ android:maxLines="1"
+ android:ellipsize="end"
android:textColor="@color/white_60_color"
android:textSize="12sp" />
+ app:layout_constraintTop_toTopOf="@id/card">
+
\ 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 09d0661..1850f7e 100644
--- a/app/src/main/res/layout/layout_panel.xml
+++ b/app/src/main/res/layout/layout_panel.xml
@@ -51,6 +51,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
+ android:ellipsize="end"
+ android:maxLines="1"
android:textColor="@color/panel_singer_color"
android:textSize="12sp" />
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 134ff9d..fe26dae 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -27,4 +27,6 @@
#B9D1A6
#26FFFFFF
#339ED3A2
+
+ #B3000000
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 564f71e..f0ca203 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -2,6 +2,11 @@
plugins {
id("com.android.application") version "8.1.3" apply false
// id("org.jetbrains.kotlin.android") version "1.9.22" apply false
+
+
+ id("com.google.gms.google-services") version "4.3.15" apply false
+ id ("com.google.firebase.crashlytics") version "2.9.2" apply false
+
}
buildscript {