Compare commits

...

12 Commits
main ... AB

Author SHA1 Message Date
litingting
56c0d99b6c Merge branch 'AB' of ssh://git.zhenbs.com:2222/2-group-adbrush-android/Music_Player into AB 2024-11-22 15:30:10 +08:00
litingting
40a897c38b 加载广告 2024-11-22 15:29:57 +08:00
lihongwei
99bde9160e 忽略.safedk下的文件 2024-11-22 15:13:25 +08:00
litingting
6412c21786 Merge branch 'AB' of ssh://git.zhenbs.com:2222/2-group-adbrush-android/Music_Player into AB 2024-11-22 14:19:35 +08:00
litingting
6666abcf17 添加混淆规则 2024-11-22 14:19:24 +08:00
lihongwei
2384b4d09d A面通知栏更新 2024-11-22 13:52:17 +08:00
litingting
8d3921de0d A面进度更新 2024-11-22 10:59:58 +08:00
lihongwei
7c739312e9 A面播放优化bug 2024-11-21 18:32:19 +08:00
litingting
1b27a928b9 接入max插页和原生广告 2024-11-21 17:16:57 +08:00
litingting
872a535cc0 删除无用资源 2024-11-19 14:18:34 +08:00
litingting
7349c58e6d 播放功能优化 2024-11-19 11:58:01 +08:00
lihongwei
c62e38eb7e A面合并 2024-11-18 16:52:58 +08:00
209 changed files with 1775 additions and 1638 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

1
.safedk/list.enc Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,36 @@
-keep class androidx.multidex.** { *; }
-keep class androidx.browser.customtabs.CustomTabsIntent { *; }
-keep class androidx.** {
*** startActivityForResult(***);
*** startActivity(***);
}
-keep class android.support.multidex.** { *; }
-keep class android.support.v4.app.** { *; }
-keep class com.google.android.gms.location.FusedLocationProviderApi { *; }
-keep class com.google.android.gms.location.LocationListener { *; }
-keep class io.fabric.sdk.android.** { *; }
-keep class okio.** { *; }
-keep class retrofit2.** { *; }
-keep class okhttp3.** { *; }
-keep class com.squareup.okhttp.** { *; }
-keep class com.android.volley.** { *; }
-keep class com.flurry.** { *; }
-keep class org.apache.** { *; }
-keep class com.applovin.** { *; }
-keep class com.google.android.gms.ads.** { *; }
-keep class com.ironsource.** { *; }
-keep class com.fyber.inneractive.** { *; }
-keep class com.vungle.** { *; }
-keep class com.unity3d.ads.** { *; }
-keep class com.unity3d.services.** { *; }
-keep class com.mintegral.msdk.** { *; }
-keep class com.mbridge.msdk.** { *; }
-keep class com.adcolony.sdk.** { *; }
-keep class com.inmobi.** { *; }
-keep class com.five_corp.** { *; }
-keep class com.bytedance.** { *; }
-keep class com.smaato.** { *; }
-keep class com.explorestack.** { *; }
-keep class com.safedk.** { *; }
-keep class com.applovin.quality.** { *; }
-keep class com.braze.** { *; }

BIN
app/OfflineMusicPlayer.jks Normal file

Binary file not shown.

View File

@ -3,29 +3,34 @@ import java.text.SimpleDateFormat
plugins { plugins {
id("com.android.application") id("com.android.application")
// id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.android")
// id ("kotlin-kapt") // id ("kotlin-kapt")
id("io.objectbox") id("io.objectbox")
id("com.google.gms.google-services") id("com.google.gms.google-services")
id("com.google.firebase.crashlytics") id("com.google.firebase.crashlytics")
}
id("applovin-quality-service")
}
applovin {
apiKey = "4CFHxOfvQvy95EqDxa_eNPe4pmq_KfoZPJeVscTMt2uT3VL2fO3iyZyBFMTOOTRbKw6WelbaDEhNzxOxVrlQTE"
}
val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
android { android {
namespace = "com.hi.music.player" namespace = "com.offline.music.playermp3"
compileSdk = 34 compileSdk = 34
defaultConfig { defaultConfig {
//com.hi.music.player applicationId = "com.offline.music.playermp3"
applicationId = "com.hi.music.player.test1"
minSdk = 23 minSdk = 23
targetSdk = 34 targetSdk = 34
versionCode = 1 versionCode = 2
versionName = "1.0.0" versionName = "1.0.1"
setProperty("archivesBaseName", "MusicApp_V" + versionName + "(${versionCode})_$timestamp")
setProperty(
"archivesBaseName",
"Offline Music Player" + versionName + "(${versionCode})_$timestamp"
)
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }
@ -38,10 +43,17 @@ android {
"proguard-rules.pro" "proguard-rules.pro"
) )
} }
debug {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
kotlinOptions{
jvmTarget = "1.8"
} }
// kotlinOptions{
// jvmTarget = "1.8"
// }
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8 sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8
@ -97,4 +109,26 @@ dependencies {
implementation("com.google.firebase:firebase-crashlytics") implementation("com.google.firebase:firebase-crashlytics")
implementation("com.google.firebase:firebase-analytics") implementation("com.google.firebase:firebase-analytics")
implementation("com.google.firebase:firebase-config") implementation("com.google.firebase:firebase-config")
//-----------------------applovin
implementation("com.applovin:applovin-sdk:+")
implementation("com.applovin.mediation:bigoads-adapter:+")
implementation("com.applovin.mediation:chartboost-adapter:+")
implementation("com.google.android.gms:play-services-base:16.1.0")
implementation("com.applovin.mediation:fyber-adapter:+")
implementation("com.applovin.mediation:inmobi-adapter:+")
implementation("com.squareup.picasso:picasso:2.71828")
implementation("androidx.recyclerview:recyclerview:1.1.0")
implementation("com.applovin.mediation:ironsource-adapter:+")
implementation("com.applovin.mediation:vungle-adapter:+")
implementation("com.applovin.mediation:facebook-adapter:+")
implementation("com.applovin.mediation:moloco-adapter:+")
implementation("com.applovin.mediation:bytedance-adapter:+")
implementation("com.applovin.mediation:unityads-adapter:+")
//applovin The SDK collects the Google Advertising ID. This requires the Android Advertising ID (AAID) module (com.google.android.gms:play-services-ads-identifier).
implementation("com.google.android.gms:play-services-ads-identifier:18.1.0")
} }

View File

@ -1,21 +1,21 @@
{ {
"project_info": { "project_info": {
"project_number": "550960818622", "project_number": "764712897094",
"project_id": "himelody-and", "project_id": "offline-music-player-176ab",
"storage_bucket": "himelody-and.appspot.com" "storage_bucket": "offline-music-player-176ab.firebasestorage.app"
}, },
"client": [ "client": [
{ {
"client_info": { "client_info": {
"mobilesdk_app_id": "1:550960818622:android:96fd4141e43410fb24f1ef", "mobilesdk_app_id": "1:764712897094:android:2d533528b5ff4271a45847",
"android_client_info": { "android_client_info": {
"package_name": "com.hi.music.player.test1" "package_name": "com.offline.music.playermp3"
} }
}, },
"oauth_client": [], "oauth_client": [],
"api_key": [ "api_key": [
{ {
"current_key": "AIzaSyCp3XR60onMqiGj9pD8ADmrDEOOn__sQDk" "current_key": "AIzaSyDohnv8AScCd1A7RTR-6LLLtQcE7EuJmIw"
} }
], ],
"services": { "services": {

View File

@ -1,6 +1,6 @@
app_name=Music Player app_name=Offline Music Player
package_name=com.hi.music.player.test package_name=com.offline.music.player
keystoreFile=app/MusicPlayer.jks keystoreFile=app/OfflineMusicPlayer.jks
key_alias=MusicPlayerkey0 key_alias=OfflineMusicPlayerkey0
key_store_password=MusicPlayer key_store_password=OfflineMusicPlayer
key_password=MusicPlayer key_password=OfflineMusicPlayer

View File

@ -29,7 +29,7 @@
-dontwarn retrofit2.** -dontwarn retrofit2.**
-dontwarn javax.annotation.Nullable -dontwarn javax.annotation.Nullable
-keep class com.hi.music.player.javabean.A_data.AudioItem { *; } -keep class com.offline.music.playermp3.javabean.A_data.AudioItem { *; }
# 保持 ContextIntent 和权限相关的公共方法 # 保持 ContextIntent 和权限相关的公共方法
-keep class android.content.Context { *; } -keep class android.content.Context { *; }
@ -43,3 +43,60 @@
-keep class * extends com.google.gson.reflect.TypeToken -keep class * extends com.google.gson.reflect.TypeToken
-keepattributes AnnotationDefault,RuntimeVisibleAnnotations -keepattributes AnnotationDefault,RuntimeVisibleAnnotations
# 使用R8全模式对未保留的类剥离通用签名挂起函数被包装在使用类型参数的continuation中
-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation
# 如果不保留R8完整模式将从返回类型中剥离通用签名
-if interface * { @retrofit2.http.* public *** *(...); }
-keep,allowoptimization,allowshrinking,allowobfuscation class <3>
# 在R8全模式下对未保留的类剥离通用签名
-keep,allowobfuscation,allowshrinking class retrofit2.Response
## ---------Retrofit混淆方法---------------
-dontwarn javax.annotation.**
-dontwarn javax.inject.**
# OkHttp3
-dontwarn okhttp3.logging.**
-keep class okhttp3.internal.**{*;}
-dontwarn okio.**
# Retrofit
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
# RxJava RxAndroid
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
rx.internal.util.atomic.LinkedQueueNode consumerNode;
}
# Gson
-keep class com.google.gson.stream.** { *; }
-keepattributes EnclosingMethod
-keep class com.offline.music.playermp3.javabean.**{*;}
-keep class org.chromium.** { *; }
-keep class androidx.media3.datasource.cronet.** { *; }
-keep class androidx.media3.exoplayer.scheduler.PlatformScheduler$PlatformSchedulerService { *; }

View File

@ -1,4 +1,4 @@
package com.hi.music.player; package com.offline.music.playermp3;
import android.content.Context; import android.content.Context;

View File

@ -5,44 +5,47 @@
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission <uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" /> android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application <application
android:name=".MusicApplication" android:name=".MusicApplication"
android:allowBackup="true" android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules" android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules" android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/im_logo" android:icon="@drawable/music_player_launch"
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/im_logo" android:roundIcon="@drawable/music_player_launch"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.MusicApp" android:theme="@style/Theme.MusicApp"
tools:targetApi="31"> tools:targetApi="31">
<activity <activity
android:name=".ui.activity.LikeSongActivity" android:name=".ui.activity.LikeSongActivity"
android:screenOrientation="portrait" android:exported="false"
android:exported="false" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.ResultListActivity" android:name=".ui.activity.ResultListActivity"
android:screenOrientation="portrait" android:exported="false"
android:exported="false" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.CategoryListActivity" android:name=".ui.activity.CategoryListActivity"
android:screenOrientation="portrait" android:exported="false"
android:exported="false" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.A_PlayActivity" android:name=".ui.activity.A_PlayActivity"
android:screenOrientation="portrait" android:exported="false"
android:exported="false" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.A_SettingActivity" android:name=".ui.activity.A_SettingActivity"
android:screenOrientation="portrait" android:exported="false"
android:exported="false" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.PlayActivity" android:name=".ui.activity.PlayActivity"
android:exported="false" android:exported="false"
@ -53,14 +56,14 @@
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.HomeActivity" android:name=".ui.activity.HomeActivity"
android:screenOrientation="portrait" android:exported="false"
android:exported="false"> android:screenOrientation="portrait">
</activity> </activity>
<activity <activity
android:name=".ui.activity.A_SplashActivity" android:name=".ui.activity.A_SplashActivity"
android:screenOrientation="portrait" android:exported="true"
android:exported="true" > android:screenOrientation="portrait">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -1,57 +0,0 @@
package com.hi.music.player;
import android.app.Application;
import android.content.Context;
import androidx.annotation.OptIn;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.database.StandaloneDatabaseProvider;
import androidx.media3.datasource.cache.LeastRecentlyUsedCacheEvictor;
import androidx.media3.datasource.cache.SimpleCache;
import com.hi.music.player.api.MediaControllerStatusListener;
import com.hi.music.player.firebase.RemoteConfigJava;
import com.hi.music.player.firebase.Sp;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.media3.MyDownloadService;
import com.hi.music.player.media3.MyMediaControllerManager;
import com.hi.music.player.objectbox.ObjectBoxManager;
public class MusicApplication extends Application {
public static Context myApplication;
public static String visitorData;
public static void setVisitorData(String visitorData) {
MusicApplication.visitorData = visitorData;
}
public static String getVisitorData() {
return visitorData;
}
@OptIn(markerClass = UnstableApi.class)
@Override
public void onCreate() {
super.onCreate();
myApplication = this;
Sp.init(this);
RemoteConfigJava.getInstance().init(this);
ObjectBoxManager.init(this);
StandaloneDatabaseProvider databaseProvider = new StandaloneDatabaseProvider(this);
MyDownloadService.init(this,databaseProvider);
MyMediaControllerManager.getInstance().init(new MediaControllerStatusListener() {
@Override
public void onMediaControllerComplete(boolean isOk) {
CommonUtils.LogMsg("=-----mediaController+" + isOk);
}
});
}
}

View File

@ -1,7 +0,0 @@
package com.hi.music.player.api;
import com.hi.music.player.javabean.CustomerDownload;
public interface onCheckDownload {
void onHasDownload(CustomerDownload customerDownload);
}

View File

@ -0,0 +1,83 @@
package com.offline.music.playermp3;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import androidx.annotation.OptIn;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.database.StandaloneDatabaseProvider;
import com.applovin.sdk.AppLovinMediationProvider;
import com.applovin.sdk.AppLovinSdk;
import com.applovin.sdk.AppLovinSdkConfiguration;
import com.applovin.sdk.AppLovinSdkInitializationConfiguration;
import com.offline.music.playermp3.api.MediaControllerStatusListener;
import com.offline.music.playermp3.firebase.RemoteConfigJava;
import com.offline.music.playermp3.firebase.Sp;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.media3.MyDownloadService;
import com.offline.music.playermp3.media3.MyMediaControllerManager;
import com.offline.music.playermp3.objectbox.ObjectBoxManager;
public class MusicApplication extends Application {
public static Context myApplication;
public static String visitorData;
private String MAx_SDK_key = "tAh5Z8CtFiG05NfRWh9UuOHCp3h3SaFvlh6Phw5ucaxFMCRs2d97F7lywfBKOEKSipdaGq8vZOaDLZkrL1fDDc";
public static boolean initSDkOK = false;
public static String initAction = "MUSIC_ACTION_INIT";
public static void setVisitorData(String visitorData) {
MusicApplication.visitorData = visitorData;
}
public static String getVisitorData() {
return visitorData;
}
@OptIn(markerClass = UnstableApi.class)
@Override
public void onCreate() {
super.onCreate();
myApplication = this;
InitializeMax();
Sp.init(this);
RemoteConfigJava.getInstance().init(this);
ObjectBoxManager.init(this);
StandaloneDatabaseProvider databaseProvider = new StandaloneDatabaseProvider(this);
MyDownloadService.init(this,databaseProvider);
MyMediaControllerManager.getInstance().init(new MediaControllerStatusListener() {
@Override
public void onMediaControllerComplete(boolean isOk) {
CommonUtils.LogMsg("=-----mediaController+" + isOk);
}
});
}
private void InitializeMax(){
AppLovinSdkInitializationConfiguration initConfig = AppLovinSdkInitializationConfiguration.builder( MAx_SDK_key, this )
.setMediationProvider( AppLovinMediationProvider.MAX )
.build();
// Initialize the SDK with the configuration
AppLovinSdk.getInstance( this ).initialize( initConfig, new AppLovinSdk.SdkInitializationListener()
{
@Override
public void onSdkInitialized(final AppLovinSdkConfiguration sdkConfig)
{
initSDkOK = true;
LocalBroadcastManager.getInstance(MusicApplication.this).sendBroadcast(new Intent(initAction));
}
} );
}
}

View File

@ -1,12 +1,12 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.adapter.FragmentStateAdapter;
import com.hi.music.player.ui.fragmnt.A_HomeFragment; import com.offline.music.playermp3.ui.fragmnt.A_HomeFragment;
import com.hi.music.player.ui.fragmnt.A_ImportFragment; import com.offline.music.playermp3.ui.fragmnt.A_ImportFragment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -12,23 +12,24 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.javabean.A_data.AudioItem; import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.hi.music.player.ui.activity.A_PlayActivity; import com.offline.music.playermp3.ui.activity.A_PlayActivity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragmentAdapter.ViewHolder> { public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragmentAdapter.ViewHolder> {
private Context context; private Context context;
private List<AudioItem> audioFiles = new ArrayList<>(); private List<AudioItem> audioFiles = new ArrayList<>();
private AudioItem audioItem; private AudioItem audioItem;
private OnOptionClickListener onOptionClickListener;; private OnOptionClickListener onOptionClickListener;
private String newName;
public A_ImportFragmentAdapter(Context context) { public A_ImportFragmentAdapter(Context context, String newName) {
this.context = context; this.context = context;
this.newName = newName;
} }
@NonNull @NonNull
@ -39,21 +40,31 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
audioItem = audioFiles.get(position); AudioItem audioItem1 = audioFiles.get(position);
holder.title.setText(audioItem.getName()); holder.title.setText(audioItem1.getName());
holder.time.setText(audioItem.getDuration()); holder.time.setText(audioItem1.getDuration());
Log.d("Adapter", "onBindViewHolder: " + audioItem.getDuration()); Log.d("Adapter", "onBindViewHolder: " + audioItem1.getDuration());
holder.itemView.setOnClickListener(new View.OnClickListener() { holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent intent = new Intent(context, A_PlayActivity.class); Intent intent = new Intent(context, A_PlayActivity.class);
intent.putExtra("Path", audioItem); intent.putExtra("Path", audioItem1);
intent.putExtra("newName",newName);
context.startActivity(intent);
}
});holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, A_PlayActivity.class);
intent.putExtra("Path", audioItem1);
intent.putExtra("newName",newName);
context.startActivity(intent); context.startActivity(intent);
} }
}); });
holder.bind(audioItem1); // 通过 bind 方法将 audioItem1 传递到 ViewHolder
} }
@Override @Override
@ -66,6 +77,11 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
notifyDataSetChanged(); // Update UI when the data changes notifyDataSetChanged(); // Update UI when the data changes
} }
// 假设你的 adapter 类中有这个方法来返回某个位置的 AudioItem 对象
public AudioItem getAudioFile(int position) {
return audioFiles.get(position); // 返回位置上的 AudioItem 对象
}
public void updateTitle(int position, String newTitle) { public void updateTitle(int position, String newTitle) {
if (position >= 0 && position < audioFiles.size()) { if (position >= 0 && position < audioFiles.size()) {
audioFiles.get(position).setName(newTitle); // 假设 AudioItem 有一个 setName 方法 audioFiles.get(position).setName(newTitle); // 假设 AudioItem 有一个 setName 方法
@ -86,12 +102,12 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
void onOptionClick(int position, String filePath, View anchorView); void onOptionClick(int position, String filePath, View anchorView);
} }
class ViewHolder extends RecyclerView.ViewHolder { class ViewHolder extends RecyclerView.ViewHolder {
ImageView option; ImageView option;
TextView title; TextView title;
TextView time; TextView time;
private AudioItem audioItem; // 定义一个 audioItem 字段
public ViewHolder(@NonNull View itemView) { public ViewHolder(@NonNull View itemView) {
super(itemView); super(itemView);
@ -101,14 +117,16 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
time = itemView.findViewById(R.id.time); time = itemView.findViewById(R.id.time);
option.setOnClickListener(v -> { option.setOnClickListener(v -> {
int position = getBindingAdapterPosition(); int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && onOptionClickListener != null) { if (position != RecyclerView.NO_POSITION && onOptionClickListener != null && audioItem != null) {
onOptionClickListener.onOptionClick(position, audioItem.getFile(), option); onOptionClickListener.onOptionClick(position, audioItem.getFile(), option);
} }
}); });
} }
// 添加 bind 方法 audioItem 传递给 ViewHolder
public void bind(AudioItem audioItem) {
this.audioItem = audioItem;
}
} }
} }

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -14,10 +14,10 @@ import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.helper.AudioItemDiffCallback; import com.offline.music.playermp3.helper.AudioItemDiffCallback;
import com.hi.music.player.javabean.A_data.AudioItem; import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.hi.music.player.ui.activity.A_PlayActivity; import com.offline.music.playermp3.ui.activity.A_PlayActivity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -13,10 +13,10 @@ import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.helper.AudioItemDiffCallback; import com.offline.music.playermp3.helper.AudioItemDiffCallback;
import com.hi.music.player.javabean.A_data.AudioItem; import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.hi.music.player.ui.activity.A_PlayActivity; import com.offline.music.playermp3.ui.activity.A_PlayActivity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -14,10 +14,10 @@ import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.helper.AudioItemDiffCallback; import com.offline.music.playermp3.helper.AudioItemDiffCallback;
import com.hi.music.player.javabean.A_data.AudioItem; import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.hi.music.player.ui.activity.A_PlayActivity; import com.offline.music.playermp3.ui.activity.A_PlayActivity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -1,27 +1,18 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource; import com.offline.music.playermp3.MusicApplication;
import com.bumptech.glide.load.engine.GlideException; import com.offline.music.playermp3.R;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.offline.music.playermp3.databinding.ItemCategoryBinding;
import com.bumptech.glide.request.RequestListener; import com.offline.music.playermp3.helper.CommonUtils;
import com.bumptech.glide.request.RequestOptions; import com.offline.music.playermp3.javabean.response.child.ResponseCategory;
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.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.child.ResponseCategory;
public class AdapterCategory extends BaseAdapter<ResponseCategory, ItemCategoryBinding>{ public class AdapterCategory extends BaseAdapter<ResponseCategory, ItemCategoryBinding>{

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -14,20 +14,15 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException; 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.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.api.onImageColorListener; import com.offline.music.playermp3.databinding.ItemCategoryListBinding;
import com.hi.music.player.databinding.ItemCategoryListBinding; import com.offline.music.playermp3.databinding.ItemSingerBinding;
import com.hi.music.player.databinding.ItemSingerBinding; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.MyValue;
import com.hi.music.player.helper.MyValue; import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.child.ResponseCategoryListChild;
import com.hi.music.player.javabean.response.child.ResponseSingle;
public class AdapterCategoryList extends BaseAdapter<ResponsePlayListInfo, ItemCategoryListBinding> { public class AdapterCategoryList extends BaseAdapter<ResponsePlayListInfo, ItemCategoryListBinding> {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -17,12 +17,11 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.databinding.ItemLikeSongBinding; import com.offline.music.playermp3.databinding.ItemLikeSongBinding;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.BoxDownloadSong; import com.offline.music.playermp3.javabean.BoxDownloadSong;
import com.hi.music.player.javabean.BoxLikeSong;
public class AdapterDownloadSong extends BaseAdapter<Download, ItemLikeSongBinding> { public class AdapterDownloadSong extends BaseAdapter<Download, ItemLikeSongBinding> {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -10,13 +10,13 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.databinding.ItemFooterLoadingBinding; import com.offline.music.playermp3.databinding.ItemFooterLoadingBinding;
import com.hi.music.player.databinding.ItemHomeBinding; import com.offline.music.playermp3.databinding.ItemHomeBinding;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.response.child.ResponseCategory; import com.offline.music.playermp3.javabean.response.child.ResponseCategory;
import com.hi.music.player.javabean.response.child.ResponseHomeChild; import com.offline.music.playermp3.javabean.response.child.ResponseHomeChild;
import com.hi.music.player.javabean.response.child.ResponseSingle; import com.offline.music.playermp3.javabean.response.child.ResponseSingle;
import java.util.List; import java.util.List;
@ -31,6 +31,7 @@ public class AdapterHome extends BaseAdapter<ResponseHomeChild, ItemHomeBinding>
@Override @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
int itemViewType = getItemViewType(position); int itemViewType = getItemViewType(position);
CommonUtils.LogMsg("-----------pos="+position+"---itemViewType="+itemViewType);
if (itemViewType == TYPE_ITEM) { if (itemViewType == TYPE_ITEM) {
VHolder<ItemHomeBinding> itemHolder = (VHolder<ItemHomeBinding>) holder; VHolder<ItemHomeBinding> itemHolder = (VHolder<ItemHomeBinding>) holder;
ItemHomeBinding vb = itemHolder.getVb(); ItemHomeBinding vb = itemHolder.getVb();
@ -39,7 +40,7 @@ public class AdapterHome extends BaseAdapter<ResponseHomeChild, ItemHomeBinding>
List<ResponseSingle> singleList = responseHomeChild.getSingleList(); List<ResponseSingle> singleList = responseHomeChild.getSingleList();
List<ResponseCategory> categoryList = responseHomeChild.getCategoryList(); List<ResponseCategory> categoryList = responseHomeChild.getCategoryList();
CommonUtils.LogMsg("position="+position+"-----------headTitle-=" + responseHomeChild.getHeaderTitle()+"--singleList="+singleList+"---categoryList="+categoryList); // CommonUtils.LogMsg("position="+position+"-----------headTitle-=" + responseHomeChild.getHeaderTitle()+"--singleList="+singleList+"---categoryList="+categoryList);
if (singleList != null && singleList.size() > 0) { if (singleList != null && singleList.size() > 0) {
vb.recyclerSinger.setVisibility(View.VISIBLE); vb.recyclerSinger.setVisibility(View.VISIBLE);
AdapterSinger adapterSinger = new AdapterSinger(); AdapterSinger adapterSinger = new AdapterSinger();

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
@ -12,9 +12,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.OptIn; import androidx.annotation.OptIn;
import androidx.lifecycle.Observer;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.exoplayer.offline.Download;
import androidx.media3.exoplayer.offline.DownloadRequest; import androidx.media3.exoplayer.offline.DownloadRequest;
import androidx.media3.exoplayer.offline.DownloadService; import androidx.media3.exoplayer.offline.DownloadService;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -27,22 +25,20 @@ import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.api.onCheckDownload; import com.offline.music.playermp3.api.onCheckDownload;
import com.hi.music.player.databinding.ItemLikeSongBinding; import com.offline.music.playermp3.databinding.ItemLikeSongBinding;
import com.hi.music.player.databinding.ItemSingerBinding; import com.offline.music.playermp3.databinding.ItemSingerBinding;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.BoxDownloadSong; import com.offline.music.playermp3.javabean.BoxDownloadSong;
import com.hi.music.player.javabean.BoxLikeSong; import com.offline.music.playermp3.javabean.BoxLikeSong;
import com.hi.music.player.javabean.CustomerDownload; import com.offline.music.playermp3.javabean.CustomerDownload;
import com.hi.music.player.javabean.response.ResponsePlayUrl; import com.offline.music.playermp3.javabean.response.ResponsePlayUrl;
import com.hi.music.player.javabean.response.child.ResponseSingle; import com.offline.music.playermp3.media3.MyDownloadService;
import com.hi.music.player.media3.MyDownloadService; import com.offline.music.playermp3.network.JsonHelper;
import com.hi.music.player.media3.MyMediaControllerManager; import com.offline.music.playermp3.network.RetrofitManager;
import com.hi.music.player.network.JsonHelper; import com.offline.music.playermp3.ui.activity.viewmodel.VMApplication;
import com.hi.music.player.network.RetrofitManager;
import com.hi.music.player.ui.activity.viewmodel.VMApplication;
import org.json.JSONObject; import org.json.JSONObject;
@ -96,7 +92,7 @@ public class AdapterLikeSong extends BaseAdapter<BoxLikeSong, ItemLikeSongBindin
vb.imDownload.setSelected(pair.first); vb.imDownload.setSelected(pair.first);
vb.imDownload.setVisibility(View.VISIBLE); vb.imDownload.setVisibility(View.VISIBLE);
vb.downloadPb.setVisibility(View.GONE); vb.downloadPb.setVisibility(View.GONE);
CommonUtils.LogMsg("--------------------状态更新"); // CommonUtils.LogMsg("--------------------状态更新");
} }
} }
@ -122,7 +118,7 @@ public class AdapterLikeSong extends BaseAdapter<BoxLikeSong, ItemLikeSongBindin
vb.imDownload.setVisibility(View.GONE); vb.imDownload.setVisibility(View.GONE);
vb.downloadPb.setVisibility(View.VISIBLE); vb.downloadPb.setVisibility(View.VISIBLE);
RetrofitManager.getInstance().getPlayUrl(videoId, new com.hi.music.player.api.RequestListener<ResponseBody>() { RetrofitManager.getInstance().getPlayUrl(videoId, new com.offline.music.playermp3.api.RequestListener<ResponseBody>() {
@Override @Override
public void onFail(String errorMsg) { public void onFail(String errorMsg) {

View File

@ -1,6 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import static androidx.media3.session.legacy.MediaControllerCompat.getMediaController;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -11,16 +9,12 @@ import androidx.media3.common.MediaItem;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.offline.music.playermp3.MusicApplication;
import com.bumptech.glide.request.RequestOptions; import com.offline.music.playermp3.R;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.databinding.ItemPlayListBinding;
import com.hi.music.player.R; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.api.MediaControllerListener; import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.databinding.ItemPlayListBinding; import com.offline.music.playermp3.media3.MyMediaControllerManager;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.media3.MyMediaControllerManager;
public class AdapterPlayList extends BaseAdapter<ResponsePlayListInfo, ItemPlayListBinding> { public class AdapterPlayList extends BaseAdapter<ResponsePlayListInfo, ItemPlayListBinding> {

View File

@ -1,7 +1,6 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -10,13 +9,10 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.databinding.ItemResultBinding;
import com.hi.music.player.databinding.ItemResultBinding; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.ItemDecoration;
import com.hi.music.player.helper.ItemDecoration; import com.offline.music.playermp3.javabean.response.ResponseResultList;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponseResultList;
import com.hi.music.player.ui.activity.PlayActivity;
public class AdapterResult extends BaseAdapter<ResponseResultList, ItemResultBinding>{ public class AdapterResult extends BaseAdapter<ResponseResultList, ItemResultBinding>{
public AdapterResult(Context mContext) { public AdapterResult(Context mContext) {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -16,11 +16,11 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.databinding.ItemResultListAlbumBinding; import com.offline.music.playermp3.databinding.ItemResultListAlbumBinding;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.response.child.ResponseResultListChild; import com.offline.music.playermp3.javabean.response.child.ResponseResultListChild;
public class AdapterResultListAlbum extends BaseAdapter<ResponseResultListChild, ItemResultListAlbumBinding>{ public class AdapterResultListAlbum extends BaseAdapter<ResponseResultListChild, ItemResultListAlbumBinding>{
@Override @Override
@ -76,6 +76,6 @@ public class AdapterResultListAlbum extends BaseAdapter<ResponseResultListChild,
} }
} }
}); });
CommonUtils.LogMsg("-------Album getBrowserId="+listChild.getBrowserId()+"---getPlayListId= "+listChild.getPlayListId()+"---getVideoId="+listChild.getVideoId()); // CommonUtils.LogMsg("-------Album getBrowserId="+listChild.getBrowserId()+"---getPlayListId= "+listChild.getPlayListId()+"---getVideoId="+listChild.getVideoId());
} }
} }

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -16,11 +16,11 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.databinding.ItemResultListSongBinding; import com.offline.music.playermp3.databinding.ItemResultListSongBinding;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.response.child.ResponseResultListChild; import com.offline.music.playermp3.javabean.response.child.ResponseResultListChild;
public class AdapterResultListSong extends BaseAdapter<ResponseResultListChild, ItemResultListSongBinding> { public class AdapterResultListSong extends BaseAdapter<ResponseResultListChild, ItemResultListSongBinding> {
@Override @Override
@ -77,7 +77,7 @@ public class AdapterResultListSong extends BaseAdapter<ResponseResultListChild,
} }
}); });
CommonUtils.LogMsg("-------Song getBrowserId=" + listChild.getBrowserId() + "---getPlayListId= " + listChild.getPlayListId() + "---getVideoId=" + listChild.getVideoId()); // CommonUtils.LogMsg("-------Song getBrowserId=" + listChild.getBrowserId() + "---getPlayListId= " + listChild.getPlayListId() + "---getVideoId=" + listChild.getVideoId());
} }
} }

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -11,12 +11,12 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop; import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.databinding.ItemSearchBinding; import com.offline.music.playermp3.databinding.ItemSearchBinding;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.response.ResponseSearch; import com.offline.music.playermp3.javabean.response.ResponseSearch;
import com.hi.music.player.javabean.response.child.ResponseSearchChild; import com.offline.music.playermp3.javabean.response.child.ResponseSearchChild;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -16,13 +16,12 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.databinding.ItemSearchBinding; import com.offline.music.playermp3.databinding.ItemSearchBinding;
import com.hi.music.player.databinding.ItemSearchChildBinding; import com.offline.music.playermp3.databinding.ItemSearchChildBinding;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.response.ResponseSearch; import com.offline.music.playermp3.javabean.response.child.ResponseSearchChild;
import com.hi.music.player.javabean.response.child.ResponseSearchChild;
public class AdapterSearchChild extends BaseAdapter<ResponseSearchChild, ItemSearchChildBinding> { public class AdapterSearchChild extends BaseAdapter<ResponseSearchChild, ItemSearchChildBinding> {
@Override @Override

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -16,11 +16,11 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.databinding.ItemSingerBinding; import com.offline.music.playermp3.databinding.ItemSingerBinding;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.response.child.ResponseSingle; import com.offline.music.playermp3.javabean.response.child.ResponseSingle;
public class AdapterSinger extends BaseAdapter<ResponseSingle, ItemSingerBinding> { public class AdapterSinger extends BaseAdapter<ResponseSingle, ItemSingerBinding> {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -7,7 +7,7 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.hi.music.player.databinding.ItemSuggestionBinding; import com.offline.music.playermp3.databinding.ItemSuggestionBinding;
public class AdapterSuggestion extends BaseAdapter<String, ItemSuggestionBinding> { public class AdapterSuggestion extends BaseAdapter<String, ItemSuggestionBinding> {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import android.content.Context; import android.content.Context;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -8,10 +8,9 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import androidx.viewbinding.ViewBinding; import androidx.viewbinding.ViewBinding;
import com.hi.music.player.api.HomeItemClickListener; import com.offline.music.playermp3.api.HomeItemClickListener;
import com.hi.music.player.databinding.ItemFooterLoadingBinding; import com.offline.music.playermp3.databinding.ItemFooterLoadingBinding;
import com.hi.music.player.javabean.response.child.ResponseCategory; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -59,14 +58,16 @@ abstract public class BaseAdapter<K, T extends ViewBinding> extends RecyclerView
public void addLoadingFooter() { public void addLoadingFooter() {
isLoadingAdded = true; isLoadingAdded = true;
notifyItemInserted(data.size()); notifyItemInserted(data.size());
CommonUtils.LogMsg("--------addLoadingFooter---position="+data.size());
} }
// Hide loading footer // Hide loading footer
public void removeLoadingFooter() { public void removeLoadingFooter() {
isLoadingAdded = false; int position = getItemCount();
int position = data.size(); if (position >= 0)
if (position > 0)
notifyItemRemoved(position); notifyItemRemoved(position);
isLoadingAdded = false;
CommonUtils.LogMsg("---------removeLoadingFooter--position="+position);
} }
@ -92,6 +93,7 @@ abstract public class BaseAdapter<K, T extends ViewBinding> extends RecyclerView
@Override @Override
public int getItemCount() { public int getItemCount() {
CommonUtils.LogMsg("---------getItemCount=");
return data.size() + (isLoadingAdded ? 1 : 0); return data.size() + (isLoadingAdded ? 1 : 0);
} }

View File

@ -1,13 +1,13 @@
package com.hi.music.player.adapter; package com.offline.music.playermp3.adapter;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.adapter.FragmentStateAdapter;
import com.hi.music.player.ui.fragmnt.HomeFragment; import com.offline.music.playermp3.ui.fragmnt.HomeFragment;
import com.hi.music.player.ui.fragmnt.ProfileFragment; import com.offline.music.playermp3.ui.fragmnt.ProfileFragment;
import com.hi.music.player.ui.fragmnt.SearchFragment; import com.offline.music.playermp3.ui.fragmnt.SearchFragment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -1,14 +1,14 @@
package com.hi.music.player.api; package com.offline.music.playermp3.api;
import androidx.media3.exoplayer.offline.Download; import androidx.media3.exoplayer.offline.Download;
import com.hi.music.player.javabean.BoxLikeSong; import com.offline.music.playermp3.javabean.BoxLikeSong;
import com.hi.music.player.javabean.response.ResponsePlayListInfo; import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.ResponseSearch; import com.offline.music.playermp3.javabean.response.ResponseSearch;
import com.hi.music.player.javabean.response.child.ResponseCategory; import com.offline.music.playermp3.javabean.response.child.ResponseCategory;
import com.hi.music.player.javabean.response.child.ResponseResultListChild; import com.offline.music.playermp3.javabean.response.child.ResponseResultListChild;
import com.hi.music.player.javabean.response.child.ResponseSearchChild; import com.offline.music.playermp3.javabean.response.child.ResponseSearchChild;
import com.hi.music.player.javabean.response.child.ResponseSingle; import com.offline.music.playermp3.javabean.response.child.ResponseSingle;
public interface HomeItemClickListener { public interface HomeItemClickListener {

View File

@ -1,6 +1,6 @@
package com.hi.music.player.api; package com.offline.music.playermp3.api;
import com.hi.music.player.javabean.BoxLikeSong; import com.offline.music.playermp3.javabean.BoxLikeSong;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.api; package com.offline.music.playermp3.api;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.api; package com.offline.music.playermp3.api;
public interface MediaControllerStatusListener { public interface MediaControllerStatusListener {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.api; package com.offline.music.playermp3.api;
public interface OnHasUrlAction { public interface OnHasUrlAction {
void onHasUrl(); void onHasUrl();

View File

@ -1,9 +1,7 @@
package com.hi.music.player.api; package com.offline.music.playermp3.api;
import org.json.JSONObject; import org.json.JSONObject;
import okhttp3.ResponseBody;
public interface RequestListener<T> { public interface RequestListener<T> {
void onFail(String errorMsg); void onFail(String errorMsg);

View File

@ -0,0 +1,7 @@
package com.offline.music.playermp3.api;
import com.offline.music.playermp3.javabean.CustomerDownload;
public interface onCheckDownload {
void onHasDownload(CustomerDownload customerDownload);
}

View File

@ -1,4 +1,4 @@
package com.hi.music.player.api; package com.offline.music.playermp3.api;
public interface onImageColorListener { public interface onImageColorListener {
void onImageColor(int color); void onImageColor(int color);

View File

@ -1,4 +1,4 @@
package com.hi.music.player.api; package com.offline.music.playermp3.api;
public interface onPlayNextListener { public interface onPlayNextListener {
void onPlayNext(boolean hasNext); void onPlayNext(boolean hasNext);

View File

@ -1,4 +1,4 @@
package com.hi.music.player.customerview; package com.offline.music.playermp3.customerview;
import android.animation.ValueAnimator; import android.animation.ValueAnimator;
import android.content.Context; import android.content.Context;
@ -9,7 +9,7 @@ import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.view.animation.LinearInterpolator; import android.view.animation.LinearInterpolator;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.dialog; package com.offline.music.playermp3.dialog;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
@ -14,12 +14,10 @@ import android.view.WindowManager;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import androidx.viewbinding.ViewBinding; import androidx.viewbinding.ViewBinding;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.R;
import com.hi.music.player.R;
public abstract class BaseDialog<T extends ViewBinding> extends DialogFragment { public abstract class BaseDialog<T extends ViewBinding> extends DialogFragment {

View File

@ -1,7 +1,6 @@
package com.hi.music.player.dialog; package com.offline.music.playermp3.dialog;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.net.Uri; import android.net.Uri;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -21,15 +20,14 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.adapter.AdapterPlayList; import com.offline.music.playermp3.adapter.AdapterPlayList;
import com.hi.music.player.api.onImageColorListener; import com.offline.music.playermp3.api.onImageColorListener;
import com.hi.music.player.databinding.DialogPlayListBinding; import com.offline.music.playermp3.databinding.DialogPlayListBinding;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.response.ResponsePlayListInfo; import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.media3.MyControllerView; import com.offline.music.playermp3.media3.MyMediaControllerManager;
import com.hi.music.player.media3.MyMediaControllerManager;
import java.util.List; import java.util.List;

View File

@ -1,21 +1,19 @@
package com.hi.music.player.firebase package com.offline.music.playermp3.firebase
import android.annotation.SuppressLint
import android.app.Application import android.app.Application
import android.content.Context import android.content.Context
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.os.Message import android.os.Message
import android.text.TextUtils import android.text.TextUtils
import android.util.Log
import com.google.firebase.remoteconfig.ConfigUpdate import com.google.firebase.remoteconfig.ConfigUpdate
import com.google.firebase.remoteconfig.ConfigUpdateListener import com.google.firebase.remoteconfig.ConfigUpdateListener
import com.google.firebase.remoteconfig.FirebaseRemoteConfig import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.FirebaseRemoteConfigException import com.google.firebase.remoteconfig.FirebaseRemoteConfigException
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings
import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue
import com.hi.music.player.BuildConfig import com.offline.music.playermp3.BuildConfig
import com.hi.music.player.helper.CommonUtils import com.offline.music.playermp3.helper.CommonUtils
import java.lang.ref.WeakReference import java.lang.ref.WeakReference

View File

@ -1,4 +1,4 @@
package com.hi.music.player.firebase; package com.offline.music.playermp3.firebase;
import android.content.Context; import android.content.Context;
import android.os.Handler; import android.os.Handler;
@ -17,7 +17,7 @@ import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
import com.google.firebase.remoteconfig.FirebaseRemoteConfigException; import com.google.firebase.remoteconfig.FirebaseRemoteConfigException;
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings; import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue; import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.Map; import java.util.Map;
@ -102,7 +102,7 @@ public class RemoteConfigJava {
mFirebaseRemoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() { mFirebaseRemoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() {
@Override @Override
public void onUpdate(@NonNull ConfigUpdate configUpdate) { public void onUpdate(@NonNull ConfigUpdate configUpdate) {
CommonUtils.LogMsg("Updated keys: " + configUpdate.getUpdatedKeys()); CommonUtils.LogMsg("---FirebaseRemote---Updated keys: " + configUpdate.getUpdatedKeys());
try { try {
mFirebaseRemoteConfig.activate().addOnCompleteListener(new OnCompleteListener<Boolean>() { mFirebaseRemoteConfig.activate().addOnCompleteListener(new OnCompleteListener<Boolean>() {
@Override @Override
@ -113,13 +113,13 @@ public class RemoteConfigJava {
} }
}); });
} catch (Exception ignore) { } catch (Exception ignore) {
CommonUtils.LogErrorMsg("onConfigUpdate Exception " + ignore.getMessage()); CommonUtils.LogMsg("---FirebaseRemote---onConfigUpdate Exception " + ignore.getMessage());
} }
} }
@Override @Override
public void onError(@NonNull FirebaseRemoteConfigException error) { public void onError(@NonNull FirebaseRemoteConfigException error) {
CommonUtils.LogErrorMsg("onConfigUpdate onError " + error.getMessage()); CommonUtils.LogMsg("---FirebaseRemote---onConfigUpdate onError " + error.getMessage());
} }
}); });
} }
@ -147,7 +147,7 @@ public class RemoteConfigJava {
} }
}); });
} catch (Exception exception) { } catch (Exception exception) {
CommonUtils.LogErrorMsg(" exception = " + exception.getMessage()); CommonUtils.LogMsg("---FirebaseRemote--- exception = " + exception.getMessage());
} }
} }
@ -156,7 +156,7 @@ public class RemoteConfigJava {
for (Map.Entry<String, FirebaseRemoteConfigValue> entry : all.entrySet()) { for (Map.Entry<String, FirebaseRemoteConfigValue> entry : all.entrySet()) {
FirebaseRemoteConfigValue value = entry.getValue(); FirebaseRemoteConfigValue value = entry.getValue();
String key = entry.getKey(); String key = entry.getKey();
CommonUtils.LogMsg("from = " + from + "Key = " + key + " Value = " + value.asString()); CommonUtils.LogMsg("---FirebaseRemote---from = " + from + "Key = " + key + " Value = " + value.asString());
if (TextUtils.equals(key_open_type, key)) { if (TextUtils.equals(key_open_type, key)) {
Sp.getInstance() Sp.getInstance()

View File

@ -1,4 +1,4 @@
package com.hi.music.player.firebase; package com.offline.music.playermp3.firebase;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
@ -39,6 +39,6 @@ public class Sp {
} }
public String getStringValue(String key) { public String getStringValue(String key) {
return preferences.getString(key, RemoteConfigJava.value_open_type_1); return preferences.getString(key, RemoteConfigJava.value_open_type_0);
} }
} }

View File

@ -1,8 +1,8 @@
package com.hi.music.player.helper; package com.offline.music.playermp3.helper;
import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.DiffUtil;
import com.hi.music.player.javabean.A_data.AudioItem; import com.offline.music.playermp3.javabean.A_data.AudioItem;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.helper; package com.offline.music.playermp3.helper;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModelStore; import androidx.lifecycle.ViewModelStore;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.helper; package com.offline.music.playermp3.helper;
import android.content.Context; import android.content.Context;
import android.graphics.Canvas; import android.graphics.Canvas;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.helper; package com.offline.music.playermp3.helper;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
@ -10,36 +10,26 @@ import android.net.Uri;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.annotation.OptIn; import androidx.annotation.OptIn;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.MediaMetadata; import androidx.media3.common.MediaMetadata;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.datasource.cache.Cache;
import androidx.media3.datasource.cache.CacheEvictor;
import androidx.media3.datasource.cache.CacheSpan;
import androidx.media3.datasource.cache.SimpleCache;
import androidx.media3.exoplayer.offline.Download; import androidx.media3.exoplayer.offline.Download;
import androidx.palette.graphics.Palette; import androidx.palette.graphics.Palette;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.api.onImageColorListener; import com.offline.music.playermp3.api.onImageColorListener;
import com.hi.music.player.javabean.BoxDownloadSong; import com.offline.music.playermp3.javabean.BoxDownloadSong;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.NavigableSet;
import java.util.TreeSet;
import okhttp3.ResponseBody; import okhttp3.ResponseBody;
public class CommonUtils { public class CommonUtils {
@ -160,9 +150,9 @@ public class CommonUtils {
int dominantDarkColor = darkVibrantSwatch.getRgb(); int dominantDarkColor = darkVibrantSwatch.getRgb();
listener.onImageColor(dominantDarkColor); listener.onImageColor(dominantDarkColor);
String dominantColorHex = String.format("#%06X", (0xFFFFFF & dominantDarkColor)); String dominantColorHex = String.format("#%06X", (0xFFFFFF & dominantDarkColor));
Log.d("Dominant Dark Color", "主色调: " + dominantColorHex); // 打印主色调
} else { } else {
Log.d("Dominant Dark Color", "未找到深色主色调");
listener.onImageColor(-1); listener.onImageColor(-1);
} }
} }

View File

@ -1,4 +1,4 @@
package com.hi.music.player.helper; package com.offline.music.playermp3.helper;
import android.graphics.Rect; import android.graphics.Rect;
import android.view.View; import android.view.View;
@ -9,7 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager; import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
public class ItemDecoration extends RecyclerView.ItemDecoration { public class ItemDecoration extends RecyclerView.ItemDecoration {

View File

@ -1,9 +1,9 @@
package com.hi.music.player.helper; package com.offline.music.playermp3.helper;
import android.content.Context; import android.content.Context;
import com.hi.music.player.javabean.A_data.AudioItem; import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.hi.music.player.javabean.A_data.Category; import com.offline.music.playermp3.javabean.A_data.Category;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.helper; package com.offline.music.playermp3.helper;
public class MyValue { public class MyValue {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.helper; package com.offline.music.playermp3.helper;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Context; import android.content.Context;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.helper; package com.offline.music.playermp3.helper;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
@ -6,8 +6,6 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import com.hi.music.player.MusicApplication;
public class ViewModelScope { public class ViewModelScope {
private ViewModelProvider mFragmentProvider; private ViewModelProvider mFragmentProvider;
private ViewModelProvider mActivityProvider; private ViewModelProvider mActivityProvider;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.A_data; package com.offline.music.playermp3.javabean.A_data;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.A_data; package com.offline.music.playermp3.javabean.A_data;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean; package com.offline.music.playermp3.javabean;
import io.objectbox.annotation.Entity; import io.objectbox.annotation.Entity;
import io.objectbox.annotation.Id; import io.objectbox.annotation.Id;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean; package com.offline.music.playermp3.javabean;
import io.objectbox.annotation.Entity; import io.objectbox.annotation.Entity;
import io.objectbox.annotation.Id; import io.objectbox.annotation.Id;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean; package com.offline.music.playermp3.javabean;
import androidx.media3.exoplayer.offline.Download; import androidx.media3.exoplayer.offline.Download;

View File

@ -1,6 +1,6 @@
package com.hi.music.player.javabean; package com.offline.music.playermp3.javabean;
import com.hi.music.player.javabean.response.ResponsePlayUrl; import com.offline.music.playermp3.javabean.response.ResponsePlayUrl;
public class CustomerUrlInfo { public class CustomerUrlInfo {

View File

@ -1,6 +1,6 @@
package com.hi.music.player.javabean.requestbody; package com.offline.music.playermp3.javabean.requestbody;
import com.hi.music.player.javabean.requestbody.child.ContextBody; import com.offline.music.playermp3.javabean.requestbody.child.ContextBody;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,6 +1,6 @@
package com.hi.music.player.javabean.requestbody; package com.offline.music.playermp3.javabean.requestbody;
import com.hi.music.player.javabean.requestbody.child.ContextBody; import com.offline.music.playermp3.javabean.requestbody.child.ContextBody;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,6 +1,6 @@
package com.hi.music.player.javabean.requestbody; package com.offline.music.playermp3.javabean.requestbody;
import com.hi.music.player.javabean.requestbody.child.ContextBody; import com.offline.music.playermp3.javabean.requestbody.child.ContextBody;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,7 +1,6 @@
package com.hi.music.player.javabean.requestbody; package com.offline.music.playermp3.javabean.requestbody;
import com.hi.music.player.javabean.requestbody.child.Client; import com.offline.music.playermp3.javabean.requestbody.child.ContextBody;
import com.hi.music.player.javabean.requestbody.child.ContextBody;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,7 +1,6 @@
package com.hi.music.player.javabean.requestbody; package com.offline.music.playermp3.javabean.requestbody;
import com.hi.music.player.javabean.requestbody.child.Client; import com.offline.music.playermp3.javabean.requestbody.child.ContextBody;
import com.hi.music.player.javabean.requestbody.child.ContextBody;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.requestbody.child; package com.offline.music.playermp3.javabean.requestbody.child;
import java.io.Serializable; import java.io.Serializable;
import java.util.Locale; import java.util.Locale;

View File

@ -1,7 +1,4 @@
package com.hi.music.player.javabean.requestbody.child; package com.offline.music.playermp3.javabean.requestbody.child;
import java.io.Serializable;
import java.util.Locale;
public class ContextBody { public class ContextBody {

View File

@ -1,6 +1,4 @@
package com.hi.music.player.javabean.response; package com.offline.music.playermp3.javabean.response;
import com.hi.music.player.javabean.response.child.ResponseCategoryListChild;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;

View File

@ -1,8 +1,8 @@
package com.hi.music.player.javabean.response; package com.offline.music.playermp3.javabean.response;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.hi.music.player.javabean.response.child.ResponseHomeChild; import com.offline.music.playermp3.javabean.response.child.ResponseHomeChild;
import java.util.List; import java.util.List;

View File

@ -1,6 +1,4 @@
package com.hi.music.player.javabean.response; package com.offline.music.playermp3.javabean.response;
import com.hi.music.player.helper.MyValue;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.response; package com.offline.music.playermp3.javabean.response;
/** /**

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.response; package com.offline.music.playermp3.javabean.response;
import java.util.List; import java.util.List;

View File

@ -1,6 +1,6 @@
package com.hi.music.player.javabean.response; package com.offline.music.playermp3.javabean.response;
import com.hi.music.player.javabean.response.child.ResponseResultListChild; import com.offline.music.playermp3.javabean.response.child.ResponseResultListChild;
import java.util.List; import java.util.List;

View File

@ -1,6 +1,6 @@
package com.hi.music.player.javabean.response; package com.offline.music.playermp3.javabean.response;
import com.hi.music.player.javabean.response.child.ResponseSearchChild; import com.offline.music.playermp3.javabean.response.child.ResponseSearchChild;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.response.child; package com.offline.music.playermp3.javabean.response.child;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.response.child; package com.offline.music.playermp3.javabean.response.child;
public class ResponseCategoryListChild { public class ResponseCategoryListChild {
private String SongTitle; private String SongTitle;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.response.child; package com.offline.music.playermp3.javabean.response.child;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.response.child; package com.offline.music.playermp3.javabean.response.child;
public class ResponseResultListChild { public class ResponseResultListChild {
private String thumbnail; private String thumbnail;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.response.child; package com.offline.music.playermp3.javabean.response.child;
public class ResponseSearchChild { public class ResponseSearchChild {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.javabean.response.child; package com.offline.music.playermp3.javabean.response.child;
import java.io.Serializable; import java.io.Serializable;

View File

@ -0,0 +1,11 @@
package com.offline.music.playermp3.max;
import com.applovin.mediation.MaxAd;
public interface MaxListener {
void onFail(MaxAd ad);
void onShowSuccess(MaxAd ad);
void onHidden();
}

View File

@ -0,0 +1,219 @@
package com.offline.music.playermp3.max;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.applovin.mediation.MaxAd;
import com.applovin.mediation.MaxAdListener;
import com.applovin.mediation.MaxError;
import com.applovin.mediation.ads.MaxInterstitialAd;
import com.applovin.mediation.nativeAds.MaxNativeAdListener;
import com.applovin.mediation.nativeAds.MaxNativeAdLoader;
import com.applovin.mediation.nativeAds.MaxNativeAdView;
import com.offline.music.playermp3.MusicApplication;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MaxManager {
public static final String AD_TAG = "------MAX---------";
/**
* 原生广告
*/
//small
public static final String native_Ad1 = "318a8ed92bb2596d";
//small
public static final String native_Ad2 = "63e3d50c36c627d2";
/**
* 插页广告
*/
private static final String one_AD = "6510769676690c4d";
private static final String two_Ad = "7c6b55091a9aaf39";
private static final String three_ad = "39c6f571b5939dde";
public static final int type_no_cache = 0;
public static final int type_has_cache = 1;
public static final int type_show_success = 2;
public static final int type_show_close = 3;
public static final int type_show_fail = 4;
private static List<MaxInterstitialAd> adList = new ArrayList<>();
public static MaxInterstitialAd getAd(List<MaxInterstitialAd> list) {
Collections.shuffle(list);
for (MaxInterstitialAd ad : list) {
if (ad.isReady()) {
return ad;
}
}
return null;
}
public static void onLoadNativeAd(ViewGroup nativeAdContainer, String adPlace,NativeMaxListener listener) {
MaxNativeAdLoader nativeAdLoader;
nativeAdLoader = new MaxNativeAdLoader(adPlace, MusicApplication.myApplication);
nativeAdLoader.setNativeAdListener(new MaxNativeAdListener() {
MaxAd nativeAd;
@Override
public void onNativeAdLoaded(@Nullable MaxNativeAdView maxNativeAdView, @NonNull MaxAd maxAd) {
// Clean up any pre-existing native ad to prevent memory leaks.
if (nativeAd != null) {
nativeAdLoader.destroy(nativeAd);
}
// Save ad for cleanup.
nativeAd = maxAd;
// Add ad view to view.
nativeAdContainer.removeAllViews();
nativeAdContainer.addView(maxNativeAdView);
nativeAdContainer.setVisibility(View.VISIBLE);
listener.onLoaded(maxAd,nativeAdLoader);
Log.d(AD_TAG, "-------onNativeAdLoaded-----maxAd=" + maxAd.getAdUnitId());
}
@Override
public void onNativeAdLoadFailed(@NonNull String s, @NonNull MaxError maxError) {
super.onNativeAdLoadFailed(s, maxError);
Log.d(AD_TAG, "-------onNativeAdLoadFailed-----maxAd=" + maxError.getMessage());
}
});
nativeAdLoader.loadAd();
}
public static void clearNativeAd(MaxAd nativeAd, MaxNativeAdLoader nativeAdLoader) {
if (nativeAd != null) {
nativeAdLoader.destroy(nativeAd);
}
nativeAdLoader.destroy();
}
public static List<MaxInterstitialAd> onLoadAd() {
if (adList.isEmpty()) {
MaxInterstitialAd AdT = new MaxInterstitialAd(two_Ad, MusicApplication.myApplication);
MaxInterstitialAd AdOne = new MaxInterstitialAd(one_AD, MusicApplication.myApplication);
MaxInterstitialAd AdThree = new MaxInterstitialAd(three_ad, MusicApplication.myApplication);
adList.add(AdOne);
adList.add(AdT);
adList.add(AdThree);
}
for (MaxInterstitialAd ad : adList) {
if (!ad.isReady()) {
setMyListener(ad, new MaxListener() {
@Override
public void onFail(MaxAd ad) {
}
@Override
public void onShowSuccess(MaxAd ad) {
}
@Override
public void onHidden() {
}
});
ad.loadAd();
}
}
return adList;
}
public static void setMyListener(MaxInterstitialAd ad, MaxListener maxListener) {
ad.setListener(new MaxAdListener() {
@Override
public void onAdLoaded(@NonNull MaxAd maxAd) {
Log.d(AD_TAG, "-------onAdLoaded-----maxAd=" + maxAd.getAdUnitId());
}
@Override
public void onAdDisplayed(@NonNull MaxAd maxAd) {
Log.d(AD_TAG, "-------onAdDisplayed-----maxAd=" + maxAd.getAdUnitId());
maxListener.onShowSuccess(maxAd);
}
@Override
public void onAdHidden(@NonNull MaxAd maxAd) {
Log.d(AD_TAG, "-------onAdHidden-----maxAd=" + maxAd.getAdUnitId());
maxListener.onHidden();
ad.loadAd();
}
@Override
public void onAdClicked(@NonNull MaxAd maxAd) {
}
@Override
public void onAdLoadFailed(@NonNull String s, @NonNull MaxError maxError) {
Log.d(AD_TAG, "-------onAdLoadFailed-----s=" + s + "----maxError=" + maxError.getMessage());
}
@Override
public void onAdDisplayFailed(@NonNull MaxAd maxAd, @NonNull MaxError maxError) {
maxListener.onFail(maxAd);
}
});
}
protected static void ShowAd(Activity activity, onAdStatusListener listener) {
MaxInterstitialAd ad = MaxManager.getAd(adList);
if (ad == null) {
listener.onAdStatus(type_no_cache);
} else {
listener.onAdStatus(type_has_cache);
MaxManager.setMyListener(ad, new MaxListener() {
@Override
public void onFail(MaxAd ad) {
listener.onAdStatus(type_show_fail);
}
@Override
public void onShowSuccess(MaxAd ad) {
listener.onAdStatus(type_show_success);
}
@Override
public void onHidden() {
listener.onAdStatus(type_show_close);
}
});
ad.showAd(activity);
}
}
public static void startShowMaxAd(Activity activity, onAdAfterAction listener) {
MaxManager.ShowAd(activity, new onAdStatusListener() {
@Override
public void onAdStatus(int type) {
if (type == MaxManager.type_show_close || type == MaxManager.type_show_fail || type == MaxManager.type_no_cache) {
if (listener != null)
listener.onAction();
}
}
});
}
}

View File

@ -0,0 +1,10 @@
package com.offline.music.playermp3.max;
import com.applovin.mediation.MaxAd;
import com.applovin.mediation.nativeAds.MaxNativeAdLoader;
public interface NativeMaxListener {
void onLoaded(MaxAd ad, MaxNativeAdLoader maxNativeAdLoader);
}

View File

@ -0,0 +1,80 @@
package com.offline.music.playermp3.max
import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.CountDownTimer
import android.util.Log
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.applovin.mediation.ads.MaxInterstitialAd
import com.offline.music.playermp3.MusicApplication
object WelComManager {
private lateinit var timer: CountDownTimer
private var need_Show = true
private lateinit var lists: List<MaxInterstitialAd>
@JvmStatic
fun initTimer(activity: Activity, countTime: Long,countAction: (Long) -> Unit, goMainAction: () -> Unit): CountDownTimer {
need_Show = true
timer = object : CountDownTimer(countTime, 100) {
override fun onTick(millisUntilFinished: Long) {
countAction.invoke(millisUntilFinished)
if (need_Show) {
MaxManager.ShowAd(activity) {
Log.d(MaxManager.AD_TAG, "--onTick----------it=$it")
if (it == MaxManager.type_has_cache) {
need_Show = false
}
if (it == MaxManager.type_show_close || it == MaxManager.type_show_fail) {
Log.d(MaxManager.AD_TAG, "--onTick---------enter")
goMainAction.invoke()
}
}
}
}
override fun onFinish() {
if (need_Show) {
MaxManager.ShowAd(activity) {
if (it == MaxManager.type_show_close || it == MaxManager.type_show_fail || it == MaxManager.type_no_cache) {
Log.d(MaxManager.AD_TAG, "--onFinish---------enter")
goMainAction.invoke()
}
}
}
}
}
startAd(activity)
return timer
}
private fun startAd(activity: Activity) {
if (!MusicApplication.initSDkOK) {
timer.start()
LocalBroadcastManager.getInstance(activity)
.registerReceiver(object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
lists = MaxManager.onLoadAd()
Log.d(MaxManager.AD_TAG, "------------1sucess")
}
}, IntentFilter(MusicApplication.initAction))
} else {
lists = MaxManager.onLoadAd()
timer.start()
Log.d(MaxManager.AD_TAG, "------------2sucess")
}
}
}

View File

@ -0,0 +1,6 @@
package com.offline.music.playermp3.max;
public interface onAdAfterAction {
void onAction();
}

View File

@ -0,0 +1,6 @@
package com.offline.music.playermp3.max;
public interface onAdStatusListener {
void onAdStatus(int type);
}

View File

@ -1,37 +1,15 @@
package com.hi.music.player.media3; package com.offline.music.playermp3.media3;
import android.net.Uri;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.datasource.DataSource; import androidx.media3.datasource.DataSource;
import androidx.media3.datasource.DataSpec;
import androidx.media3.datasource.DefaultDataSource;
import androidx.media3.datasource.DefaultDataSourceFactory;
import androidx.media3.datasource.DefaultHttpDataSource;
import androidx.media3.datasource.ResolvingDataSource;
import androidx.media3.datasource.cache.CacheDataSource;
import androidx.media3.datasource.cache.SimpleCache; import androidx.media3.datasource.cache.SimpleCache;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.drm.DrmSessionManagerProvider; import androidx.media3.exoplayer.drm.DrmSessionManagerProvider;
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory;
import androidx.media3.exoplayer.source.MediaSource; import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.source.MediaSourceFactory;
import androidx.media3.exoplayer.source.ProgressiveMediaSource; import androidx.media3.exoplayer.source.ProgressiveMediaSource;
import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy; import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.api.RequestListener;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.response.ResponsePlayUrl;
import com.hi.music.player.network.JsonHelper;
import com.hi.music.player.network.RetrofitManager;
import org.json.JSONObject;
import java.io.IOException;
import okhttp3.ResponseBody;
public class DynamicMediaSourceFactory implements MediaSource.Factory { public class DynamicMediaSourceFactory implements MediaSource.Factory {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.media3; package com.offline.music.playermp3.media3;
import android.content.Context; import android.content.Context;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.media3; package com.offline.music.playermp3.media3;
import android.content.Context; import android.content.Context;
@ -8,7 +8,7 @@ import androidx.media3.database.StandaloneDatabaseProvider;
import androidx.media3.datasource.cache.NoOpCacheEvictor; import androidx.media3.datasource.cache.NoOpCacheEvictor;
import androidx.media3.datasource.cache.SimpleCache; import androidx.media3.datasource.cache.SimpleCache;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import java.io.File; import java.io.File;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.media3; package com.offline.music.playermp3.media3;
import android.app.Notification; import android.app.Notification;
import android.content.Context; import android.content.Context;
@ -18,11 +18,11 @@ import androidx.media3.exoplayer.offline.DownloadNotificationHelper;
import androidx.media3.exoplayer.offline.DownloadService; import androidx.media3.exoplayer.offline.DownloadService;
import androidx.media3.exoplayer.scheduler.Scheduler; import androidx.media3.exoplayer.scheduler.Scheduler;
import com.hi.music.player.R; import com.offline.music.playermp3.R;
import com.hi.music.player.api.onCheckDownload; import com.offline.music.playermp3.api.onCheckDownload;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.javabean.CustomerDownload; import com.offline.music.playermp3.javabean.CustomerDownload;
import com.hi.music.player.ui.activity.viewmodel.VMApplication; import com.offline.music.playermp3.ui.activity.viewmodel.VMApplication;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -90,14 +90,15 @@ public class MyDownloadService extends DownloadService {
if (download.state == Download.STATE_COMPLETED) { if (download.state == Download.STATE_COMPLETED) {
// 下载完成 // 下载完成
vmApplication.setDownloadChange(new Pair<>(true, download)); vmApplication.setDownloadChange(new Pair<>(true, download));
CommonUtils.LogMsg("----------------下载完成 id=" + id + "--thread=" + Thread.currentThread().getName()); // CommonUtils.LogMsg("----------------下载完成 id=" + id + "--thread=" + Thread.currentThread().getName());
updateDownloadUi(vmApplication); updateDownloadUi(vmApplication);
} else if (download.state == Download.STATE_FAILED) { } else if (download.state == Download.STATE_FAILED) {
// 下载失败 // 下载失败
CommonUtils.LogMsg("----------------下载失败 id=" + id + "---finalException=" + finalException.getMessage()); // CommonUtils.LogMsg("----------------下载失败 id=" + id + "---finalException=" + finalException.getMessage());
vmApplication.setDownloadChange(new Pair<>(false, download)); vmApplication.setDownloadChange(new Pair<>(false, download));
updateDownloadUi(vmApplication);
} }
@ -118,7 +119,7 @@ public class MyDownloadService extends DownloadService {
DownloadIndex downloadIndex = mDownloadManager.getDownloadIndex(); DownloadIndex downloadIndex = mDownloadManager.getDownloadIndex();
Download download = downloadIndex.getDownload(videoId); Download download = downloadIndex.getDownload(videoId);
return new CustomerDownload(download, download != null); return new CustomerDownload(download, download != null && download.state == Download.STATE_COMPLETED);
}).subscribeOn(Schedulers.io()) }).subscribeOn(Schedulers.io())
@ -162,7 +163,7 @@ public class MyDownloadService extends DownloadService {
} }
CommonUtils.LogMsg("----------------下载总数量 -count=" + downloadList.size()); // CommonUtils.LogMsg("----------------下载总数量 -count=" + downloadList.size());
vmApplication.setDownloadData(downloadList); vmApplication.setDownloadData(downloadList);
}); });

View File

@ -1,4 +1,4 @@
package com.hi.music.player.media3; package com.offline.music.playermp3.media3;
import android.content.ComponentName; import android.content.ComponentName;
import android.net.Uri; import android.net.Uri;
@ -15,21 +15,20 @@ import androidx.media3.session.SessionToken;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.MoreExecutors;
import com.hi.music.player.MusicApplication; import com.offline.music.playermp3.MusicApplication;
import com.hi.music.player.api.MediaControllerListener; import com.offline.music.playermp3.api.MediaControllerListener;
import com.hi.music.player.api.MediaControllerStatusListener; import com.offline.music.playermp3.api.MediaControllerStatusListener;
import com.hi.music.player.api.OnHasUrlAction; import com.offline.music.playermp3.api.OnHasUrlAction;
import com.hi.music.player.api.onCheckDownload; import com.offline.music.playermp3.api.onCheckDownload;
import com.hi.music.player.api.onPlayNextListener; import com.offline.music.playermp3.api.onPlayNextListener;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import com.hi.music.player.helper.MyValue; import com.offline.music.playermp3.helper.MyValue;
import com.hi.music.player.javabean.CustomerDownload; import com.offline.music.playermp3.javabean.CustomerDownload;
import com.hi.music.player.javabean.response.ResponsePlayListInfo; import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.ResponsePlayUrl; import com.offline.music.playermp3.javabean.response.ResponsePlayUrl;
import com.hi.music.player.network.RetrofitManager; import com.offline.music.playermp3.network.RetrofitManager;
import com.hi.music.player.ui.activity.viewmodel.VMApplication; import com.offline.music.playermp3.ui.activity.viewmodel.VMApplication;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
@ -144,7 +143,7 @@ public class MyMediaControllerManager {
onCallRequestUrl(nextMediaItemIndex, playNextNow, new OnHasUrlAction() { onCallRequestUrl(nextMediaItemIndex, playNextNow, new OnHasUrlAction() {
@Override @Override
public void onHasUrl() { public void onHasUrl() {
CommonUtils.LogMsg("-------------有有效URl--播放检查下一首 位置=" + nextMediaItemIndex); // CommonUtils.LogMsg("-------------有有效URl--播放检查下一首 位置=" + nextMediaItemIndex);
} }
}); });
} }
@ -153,7 +152,7 @@ public class MyMediaControllerManager {
onCallRequestUrl(previousMediaItemIndex, false, new OnHasUrlAction() { onCallRequestUrl(previousMediaItemIndex, false, new OnHasUrlAction() {
@Override @Override
public void onHasUrl() { public void onHasUrl() {
CommonUtils.LogMsg("-------------有有效URl--播放检查上一首 位置=" + previousMediaItemIndex); // CommonUtils.LogMsg("-------------有有效URl--播放检查上一首 位置=" + previousMediaItemIndex);
} }
}); });
} }
@ -253,7 +252,7 @@ public class MyMediaControllerManager {
} }
CharSequence title = mediaController.getMediaItemAt(i).mediaMetadata.title; CharSequence title = mediaController.getMediaItemAt(i).mediaMetadata.title;
CommonUtils.LogMsg("-------------更新播放列表中的音频--id=" + playUrl.getVideoId()); // CommonUtils.LogMsg("-------------更新播放列表中的音频--id=" + playUrl.getVideoId());
mediaController.replaceMediaItem(i, builder.build()); mediaController.replaceMediaItem(i, builder.build());
break; break;
} }
@ -302,7 +301,7 @@ public class MyMediaControllerManager {
MediaMetadata_builder.setArtworkUri(Uri.parse(playInfo.getCovert())); MediaMetadata_builder.setArtworkUri(Uri.parse(playInfo.getCovert()));
MediaMetadata_builder.setTitle(playInfo.getSongTitle()); MediaMetadata_builder.setTitle(playInfo.getSongTitle());
CommonUtils.LogMsg("----------添加播放列表 i=" + i + "---" + playInfo.getSingerName() + "-------VideoId=" + videoId + "---playInfo.getDuration()=" + playInfo.getDuration()); // CommonUtils.LogMsg("----------添加播放列表 i=" + i + "---" + playInfo.getSingerName() + "-------VideoId=" + videoId + "---playInfo.getDuration()=" + playInfo.getDuration());
// MediaMetadata_builder.setRecordingYear(Integer.parseInt(playInfo.getYear())); // MediaMetadata_builder.setRecordingYear(Integer.parseInt(playInfo.getYear()));
builder.setMediaMetadata(MediaMetadata_builder.build()); builder.setMediaMetadata(MediaMetadata_builder.build());
mediaController.addMediaItem(builder.build()); mediaController.addMediaItem(builder.build());
@ -387,7 +386,7 @@ public class MyMediaControllerManager {
@Override @Override
public void onHasUrl() { public void onHasUrl() {
mediaController.play(); mediaController.play();
CommonUtils.LogMsg("-------------有有效URl--播放指定播放列表位置的歌曲 index=" + index); // CommonUtils.LogMsg("-------------有有效URl--播放指定播放列表位置的歌曲 index=" + index);
} }
}); });
@ -405,9 +404,9 @@ public class MyMediaControllerManager {
if (customerDownload.isDownload()) { if (customerDownload.isDownload()) {
MediaItem mediaItem = CommonUtils.downloadToMediaItem(customerDownload.getDownloadData()); MediaItem mediaItem = CommonUtils.downloadToMediaItem(customerDownload.getDownloadData());
mediaController.replaceMediaItem(index, mediaItem); mediaController.replaceMediaItem(index, mediaItem);
CommonUtils.LogMsg("-------------请求URl 已经下载过 index" + index + "---playNow=" + playNow); // CommonUtils.LogMsg("-------------请求URl 已经下载过 index" + index + "---playNow=" + playNow);
} else { } else {
CommonUtils.LogMsg("-------------请求URl index" + index + "---playNow=" + playNow); // CommonUtils.LogMsg("-------------请求URl index" + index + "---playNow=" + playNow);
mListener.onRequestNextUri(mediaItemAt.mediaId, index, playNow); mListener.onRequestNextUri(mediaItemAt.mediaId, index, playNow);
} }

View File

@ -1,4 +1,4 @@
package com.hi.music.player.media3; package com.offline.music.playermp3.media3;
import android.content.Context; import android.content.Context;
@ -30,7 +30,5 @@ public class MyPlayCacheManager {
return playCache; return playCache;
} }
public static SimpleCache getPlayCache() {
return playCache;
}
} }

View File

@ -1,4 +1,4 @@
package com.hi.music.player.media3; package com.offline.music.playermp3.media3;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -14,21 +14,17 @@ import androidx.media3.datasource.DataSpec;
import androidx.media3.datasource.DefaultDataSource; import androidx.media3.datasource.DefaultDataSource;
import androidx.media3.datasource.DefaultHttpDataSource; import androidx.media3.datasource.DefaultHttpDataSource;
import androidx.media3.datasource.ResolvingDataSource; import androidx.media3.datasource.ResolvingDataSource;
import androidx.media3.datasource.TransferListener;
import androidx.media3.datasource.cache.CacheDataSource; import androidx.media3.datasource.cache.CacheDataSource;
import androidx.media3.datasource.cache.SimpleCache; import androidx.media3.datasource.cache.SimpleCache;
import androidx.media3.exoplayer.DefaultLoadControl; import androidx.media3.exoplayer.DefaultLoadControl;
import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory;
import androidx.media3.exoplayer.source.MediaSource; import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.source.ProgressiveMediaSource; import androidx.media3.exoplayer.source.ProgressiveMediaSource;
import androidx.media3.session.MediaSession; import androidx.media3.session.MediaSession;
import androidx.media3.session.MediaSessionService; import androidx.media3.session.MediaSessionService;
import com.hi.music.player.helper.CommonUtils; import com.offline.music.playermp3.helper.CommonUtils;
import java.io.IOException;
public class PlaybackService extends MediaSessionService { public class PlaybackService extends MediaSessionService {
private MediaSession mediaSession = null; private MediaSession mediaSession = null;
@ -74,21 +70,11 @@ public class PlaybackService extends MediaSessionService {
DefaultDataSource.Factory factory = new DefaultDataSource.Factory(this); DefaultDataSource.Factory factory = new DefaultDataSource.Factory(this);
playCache = MyPlayCacheManager.getInitPlayCache(context); playCache = MyPlayCacheManager.getInitPlayCache(context);
CacheDataSource.Factory factory1 = new CacheDataSource.Factory().setCache(playCache) CacheDataSource.Factory factory1 = new CacheDataSource.Factory().setCache(playCache)
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory() .setUpstreamDataSourceFactory(factory);
.setConnectTimeoutMs(16000) // .setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory()
.setReadTimeoutMs(8000) // .setConnectTimeoutMs(16000)
.setUserAgent("Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0")) // .setReadTimeoutMs(8000)
.setEventListener(new CacheDataSource.EventListener() { // .setUserAgent("Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0"));
@Override
public void onCachedBytesRead(long cacheSizeBytes, long cachedBytesRead) {
CommonUtils.LogMsg("-----------缓存2 -PlayCache-" + cacheSizeBytes + "----cacheSizeBytes=" + cachedBytesRead);
}
@Override
public void onCacheIgnored(int reason) {
CommonUtils.LogMsg("-----------缓存2忽略 PlayCache=" + reason);
}
});
downloadCache = MyDownloadService.getDownloadCache(); downloadCache = MyDownloadService.getDownloadCache();
return new CacheDataSource.Factory() return new CacheDataSource.Factory()
.setCache(downloadCache) .setCache(downloadCache)
@ -97,12 +83,12 @@ public class PlaybackService extends MediaSessionService {
.setEventListener(new CacheDataSource.EventListener() { .setEventListener(new CacheDataSource.EventListener() {
@Override @Override
public void onCachedBytesRead(long cacheSizeBytes, long cachedBytesRead) { public void onCachedBytesRead(long cacheSizeBytes, long cachedBytesRead) {
CommonUtils.LogMsg("-----------缓存1 DownloadCache --" + cacheSizeBytes + "----cacheSizeBytes=" + cachedBytesRead); // CommonUtils.LogMsg("-----------缓存1 DownloadCache --" + cacheSizeBytes + "----cacheSizeBytes=" + cachedBytesRead);
} }
@Override @Override
public void onCacheIgnored(int reason) { public void onCacheIgnored(int reason) {
CommonUtils.LogMsg("-----------缓存1忽略DownloadCache =" + reason); // CommonUtils.LogMsg("-----------缓存1忽略DownloadCache =" + reason);
} }
}); });
// .setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR); // .setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR);
@ -117,7 +103,7 @@ public class PlaybackService extends MediaSessionService {
@Override @Override
public DataSpec resolveDataSpec(DataSpec dataSpec) { public DataSpec resolveDataSpec(DataSpec dataSpec) {
CommonUtils.LogMsg("--------resolveDataSpec dataSpec.key=" + dataSpec.key+"---dataSpec.uri="+dataSpec.uri); CommonUtils.LogMsg("--------resolveDataSpec dataSpec.key=" + dataSpec.key);
return dataSpec; return dataSpec;
// long length = 1L; // long length = 1L;
@ -142,7 +128,7 @@ public class PlaybackService extends MediaSessionService {
@Override @Override
public Uri resolveReportedUri(Uri uri) { public Uri resolveReportedUri(Uri uri) {
CommonUtils.LogMsg("--------resolveDataSpec uri=" + uri); CommonUtils.LogMsg("--------resolveDataSpec uri=" + uri);
return ResolvingDataSource.Resolver.super.resolveReportedUri(Uri.parse("---")); return ResolvingDataSource.Resolver.super.resolveReportedUri(uri);
} }
}); });
} }

View File

@ -1,14 +1,8 @@
package com.hi.music.player.media3; package com.offline.music.playermp3.media3;
import androidx.media3.common.MediaItem;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.datasource.DataSource; import androidx.media3.datasource.DataSource;
import androidx.media3.exoplayer.drm.DrmSessionManagerProvider;
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory; import androidx.media3.exoplayer.source.DefaultMediaSourceFactory;
import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy;
import com.hi.music.player.helper.CommonUtils;
public class testSourceFactory implements DataSource.Factory { public class testSourceFactory implements DataSource.Factory {

Some files were not shown because too many files have changed in this diff Show More