A面合并

This commit is contained in:
lihongwei 2024-11-18 16:52:58 +08:00
parent 3aac60e3ca
commit c62e38eb7e
157 changed files with 741 additions and 910 deletions

BIN
app/OfflineMusicPlayer.jks Normal file

Binary file not shown.

View File

@ -13,19 +13,21 @@ plugins {
val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
android {
namespace = "com.hi.music.player"
namespace = "com.offline.music.playermp3"
compileSdk = 34
defaultConfig {
//com.hi.music.player
applicationId = "com.hi.music.player.test1"
applicationId = "com.offline.music.playermp3"
minSdk = 23
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
setProperty("archivesBaseName", "MusicApp_V" + versionName + "(${versionCode})_$timestamp")
setProperty(
"archivesBaseName",
"Offline Music Player" + versionName + "(${versionCode})_$timestamp"
)
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

View File

@ -9,7 +9,7 @@
"client_info": {
"mobilesdk_app_id": "1:550960818622:android:96fd4141e43410fb24f1ef",
"android_client_info": {
"package_name": "com.hi.music.player.test1"
"package_name": "com.offline.music.playermp3"
}
},
"oauth_client": [],

View File

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

View File

@ -29,7 +29,7 @@
-dontwarn retrofit2.**
-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 和权限相关的公共方法
-keep class android.content.Context { *; }

View File

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

View File

@ -17,9 +17,9 @@
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/im_logo"
android:icon="@drawable/music_player_launch"
android:label="@string/app_name"
android:roundIcon="@mipmap/im_logo"
android:roundIcon="@drawable/music_player_launch"
android:supportsRtl="true"
android:theme="@style/Theme.MusicApp"
tools:targetApi="31">

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

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

@ -1,4 +1,4 @@
package com.hi.music.player;
package com.offline.music.playermp3;
import android.app.Application;
import android.content.Context;
@ -6,16 +6,14 @@ 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;
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 {

View File

@ -1,12 +1,12 @@
package com.hi.music.player.adapter;
package com.offline.music.playermp3.adapter;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import com.hi.music.player.ui.fragmnt.A_HomeFragment;
import com.hi.music.player.ui.fragmnt.A_ImportFragment;
import com.offline.music.playermp3.ui.fragmnt.A_HomeFragment;
import com.offline.music.playermp3.ui.fragmnt.A_ImportFragment;
import java.util.ArrayList;
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.Intent;
@ -12,23 +12,24 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.hi.music.player.R;
import com.hi.music.player.javabean.A_data.AudioItem;
import com.hi.music.player.ui.activity.A_PlayActivity;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.offline.music.playermp3.ui.activity.A_PlayActivity;
import java.util.ArrayList;
import java.util.List;
public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragmentAdapter.ViewHolder> {
private Context context;
private List<AudioItem> audioFiles = new ArrayList<>();
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.newName = newName;
}
@NonNull
@ -39,21 +40,31 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
audioItem = audioFiles.get(position);
AudioItem audioItem1 = audioFiles.get(position);
holder.title.setText(audioItem.getName());
holder.time.setText(audioItem.getDuration());
Log.d("Adapter", "onBindViewHolder: " + audioItem.getDuration());
holder.title.setText(audioItem1.getName());
holder.time.setText(audioItem1.getDuration());
Log.d("Adapter", "onBindViewHolder: " + audioItem1.getDuration());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
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);
}
});
holder.bind(audioItem1); // 通过 bind 方法将 audioItem1 传递到 ViewHolder
}
@Override
@ -66,6 +77,11 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
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) {
if (position >= 0 && position < audioFiles.size()) {
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);
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView option;
TextView title;
TextView time;
private AudioItem audioItem; // 定义一个 audioItem 字段
public ViewHolder(@NonNull View itemView) {
super(itemView);
@ -101,14 +117,16 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
time = itemView.findViewById(R.id.time);
option.setOnClickListener(v -> {
int position = getBindingAdapterPosition();
if (position != RecyclerView.NO_POSITION && onOptionClickListener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && onOptionClickListener != null && audioItem != null) {
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.Intent;
@ -14,10 +14,10 @@ import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.hi.music.player.R;
import com.hi.music.player.helper.AudioItemDiffCallback;
import com.hi.music.player.javabean.A_data.AudioItem;
import com.hi.music.player.ui.activity.A_PlayActivity;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.helper.AudioItemDiffCallback;
import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.offline.music.playermp3.ui.activity.A_PlayActivity;
import java.util.ArrayList;
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.Intent;
@ -13,10 +13,10 @@ import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.hi.music.player.R;
import com.hi.music.player.helper.AudioItemDiffCallback;
import com.hi.music.player.javabean.A_data.AudioItem;
import com.hi.music.player.ui.activity.A_PlayActivity;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.helper.AudioItemDiffCallback;
import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.offline.music.playermp3.ui.activity.A_PlayActivity;
import java.util.ArrayList;
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.Intent;
@ -14,10 +14,10 @@ import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.hi.music.player.R;
import com.hi.music.player.helper.AudioItemDiffCallback;
import com.hi.music.player.javabean.A_data.AudioItem;
import com.hi.music.player.ui.activity.A_PlayActivity;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.helper.AudioItemDiffCallback;
import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.offline.music.playermp3.ui.activity.A_PlayActivity;
import java.util.ArrayList;
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.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.databinding.ItemCategoryBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.child.ResponseCategory;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ItemCategoryBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.response.child.ResponseCategory;
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.view.LayoutInflater;
@ -14,20 +14,15 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.api.onImageColorListener;
import com.hi.music.player.databinding.ItemCategoryListBinding;
import com.hi.music.player.databinding.ItemSingerBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.child.ResponseCategoryListChild;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ItemCategoryListBinding;
import com.offline.music.playermp3.databinding.ItemSingerBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.helper.MyValue;
import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
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.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.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.databinding.ItemLikeSongBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.BoxDownloadSong;
import com.hi.music.player.javabean.BoxLikeSong;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ItemLikeSongBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.BoxDownloadSong;
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.View;
@ -10,13 +10,13 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.databinding.ItemFooterLoadingBinding;
import com.hi.music.player.databinding.ItemHomeBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.response.child.ResponseCategory;
import com.hi.music.player.javabean.response.child.ResponseHomeChild;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.databinding.ItemFooterLoadingBinding;
import com.offline.music.playermp3.databinding.ItemHomeBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.response.child.ResponseCategory;
import com.offline.music.playermp3.javabean.response.child.ResponseHomeChild;
import com.offline.music.playermp3.javabean.response.child.ResponseSingle;
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.graphics.drawable.Drawable;
@ -12,9 +12,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.OptIn;
import androidx.lifecycle.Observer;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.exoplayer.offline.Download;
import androidx.media3.exoplayer.offline.DownloadRequest;
import androidx.media3.exoplayer.offline.DownloadService;
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.target.Target;
import com.google.gson.Gson;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.api.onCheckDownload;
import com.hi.music.player.databinding.ItemLikeSongBinding;
import com.hi.music.player.databinding.ItemSingerBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.BoxDownloadSong;
import com.hi.music.player.javabean.BoxLikeSong;
import com.hi.music.player.javabean.CustomerDownload;
import com.hi.music.player.javabean.response.ResponsePlayUrl;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.hi.music.player.media3.MyDownloadService;
import com.hi.music.player.media3.MyMediaControllerManager;
import com.hi.music.player.network.JsonHelper;
import com.hi.music.player.network.RetrofitManager;
import com.hi.music.player.ui.activity.viewmodel.VMApplication;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.api.onCheckDownload;
import com.offline.music.playermp3.databinding.ItemLikeSongBinding;
import com.offline.music.playermp3.databinding.ItemSingerBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.BoxDownloadSong;
import com.offline.music.playermp3.javabean.BoxLikeSong;
import com.offline.music.playermp3.javabean.CustomerDownload;
import com.offline.music.playermp3.javabean.response.ResponsePlayUrl;
import com.offline.music.playermp3.media3.MyDownloadService;
import com.offline.music.playermp3.network.JsonHelper;
import com.offline.music.playermp3.network.RetrofitManager;
import com.offline.music.playermp3.ui.activity.viewmodel.VMApplication;
import org.json.JSONObject;
@ -122,7 +118,7 @@ public class AdapterLikeSong extends BaseAdapter<BoxLikeSong, ItemLikeSongBindin
vb.imDownload.setVisibility(View.GONE);
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
public void onFail(String errorMsg) {

View File

@ -1,6 +1,4 @@
package com.hi.music.player.adapter;
import static androidx.media3.session.legacy.MediaControllerCompat.getMediaController;
package com.offline.music.playermp3.adapter;
import android.view.LayoutInflater;
import android.view.View;
@ -11,16 +9,12 @@ import androidx.media3.common.MediaItem;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.api.MediaControllerListener;
import com.hi.music.player.databinding.ItemPlayListBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.media3.MyMediaControllerManager;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ItemPlayListBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.offline.music.playermp3.media3.MyMediaControllerManager;
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.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -10,13 +9,10 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.databinding.ItemResultBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.ItemDecoration;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponseResultList;
import com.hi.music.player.ui.activity.PlayActivity;
import com.offline.music.playermp3.databinding.ItemResultBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.helper.ItemDecoration;
import com.offline.music.playermp3.javabean.response.ResponseResultList;
public class AdapterResult extends BaseAdapter<ResponseResultList, ItemResultBinding>{
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.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.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.databinding.ItemResultListAlbumBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.response.child.ResponseResultListChild;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ItemResultListAlbumBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.response.child.ResponseResultListChild;
public class AdapterResultListAlbum extends BaseAdapter<ResponseResultListChild, ItemResultListAlbumBinding>{
@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.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.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.databinding.ItemResultListSongBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.response.child.ResponseResultListChild;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ItemResultListSongBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.response.child.ResponseResultListChild;
public class AdapterResultListSong extends BaseAdapter<ResponseResultListChild, ItemResultListSongBinding> {
@Override

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.View;
@ -11,12 +11,12 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.databinding.ItemSearchBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.response.ResponseSearch;
import com.hi.music.player.javabean.response.child.ResponseSearchChild;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ItemSearchBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.response.ResponseSearch;
import com.offline.music.playermp3.javabean.response.child.ResponseSearchChild;
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.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.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.databinding.ItemSearchBinding;
import com.hi.music.player.databinding.ItemSearchChildBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.response.ResponseSearch;
import com.hi.music.player.javabean.response.child.ResponseSearchChild;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ItemSearchBinding;
import com.offline.music.playermp3.databinding.ItemSearchChildBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.response.child.ResponseSearchChild;
public class AdapterSearchChild extends BaseAdapter<ResponseSearchChild, ItemSearchChildBinding> {
@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.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.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.databinding.ItemSingerBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ItemSingerBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.response.child.ResponseSingle;
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.View;
@ -7,7 +7,7 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
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> {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.adapter;
package com.offline.music.playermp3.adapter;
import android.content.Context;
import android.view.LayoutInflater;
@ -8,10 +8,8 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewbinding.ViewBinding;
import com.hi.music.player.api.HomeItemClickListener;
import com.hi.music.player.databinding.ItemFooterLoadingBinding;
import com.hi.music.player.javabean.response.child.ResponseCategory;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.offline.music.playermp3.api.HomeItemClickListener;
import com.offline.music.playermp3.databinding.ItemFooterLoadingBinding;
import java.util.ArrayList;
import java.util.List;

View File

@ -1,13 +1,13 @@
package com.hi.music.player.adapter;
package com.offline.music.playermp3.adapter;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import com.hi.music.player.ui.fragmnt.HomeFragment;
import com.hi.music.player.ui.fragmnt.ProfileFragment;
import com.hi.music.player.ui.fragmnt.SearchFragment;
import com.offline.music.playermp3.ui.fragmnt.HomeFragment;
import com.offline.music.playermp3.ui.fragmnt.ProfileFragment;
import com.offline.music.playermp3.ui.fragmnt.SearchFragment;
import java.util.ArrayList;
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 com.hi.music.player.javabean.BoxLikeSong;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.ResponseSearch;
import com.hi.music.player.javabean.response.child.ResponseCategory;
import com.hi.music.player.javabean.response.child.ResponseResultListChild;
import com.hi.music.player.javabean.response.child.ResponseSearchChild;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.offline.music.playermp3.javabean.BoxLikeSong;
import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.offline.music.playermp3.javabean.response.ResponseSearch;
import com.offline.music.playermp3.javabean.response.child.ResponseCategory;
import com.offline.music.playermp3.javabean.response.child.ResponseResultListChild;
import com.offline.music.playermp3.javabean.response.child.ResponseSearchChild;
import com.offline.music.playermp3.javabean.response.child.ResponseSingle;
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;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.api;
package com.offline.music.playermp3.api;
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 {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.api;
package com.offline.music.playermp3.api;
public interface OnHasUrlAction {
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 okhttp3.ResponseBody;
public interface RequestListener<T> {
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 {
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 {
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.content.Context;
@ -9,7 +9,7 @@ import android.util.AttributeSet;
import android.view.View;
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.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.dialog;
package com.offline.music.playermp3.dialog;
import android.annotation.SuppressLint;
@ -14,12 +14,10 @@ import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.DialogFragment;
import androidx.viewbinding.ViewBinding;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.offline.music.playermp3.R;
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.GradientDrawable;
import android.net.Uri;
import android.view.LayoutInflater;
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.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.adapter.AdapterPlayList;
import com.hi.music.player.api.onImageColorListener;
import com.hi.music.player.databinding.DialogPlayListBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.media3.MyControllerView;
import com.hi.music.player.media3.MyMediaControllerManager;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.adapter.AdapterPlayList;
import com.offline.music.playermp3.api.onImageColorListener;
import com.offline.music.playermp3.databinding.DialogPlayListBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.offline.music.playermp3.media3.MyMediaControllerManager;
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.content.Context
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.text.TextUtils
import android.util.Log
import com.google.firebase.remoteconfig.ConfigUpdate
import com.google.firebase.remoteconfig.ConfigUpdateListener
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.FirebaseRemoteConfigException
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings
import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue
import com.hi.music.player.BuildConfig
import com.hi.music.player.helper.CommonUtils
import com.offline.music.playermp3.BuildConfig
import com.offline.music.playermp3.helper.CommonUtils
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.os.Handler;
@ -17,7 +17,7 @@ import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
import com.google.firebase.remoteconfig.FirebaseRemoteConfigException;
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue;
import com.hi.music.player.helper.CommonUtils;
import com.offline.music.playermp3.helper.CommonUtils;
import java.lang.ref.WeakReference;
import java.util.Map;

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.SharedPreferences;
@ -39,6 +39,6 @@ public class Sp {
}
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 com.hi.music.player.javabean.A_data.AudioItem;
import com.offline.music.playermp3.javabean.A_data.AudioItem;
import java.util.List;
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.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.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.graphics.Bitmap;
@ -10,36 +10,26 @@ import android.net.Uri;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.annotation.OptIn;
import androidx.media3.common.MediaItem;
import androidx.media3.common.MediaMetadata;
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.palette.graphics.Palette;
import com.google.gson.Gson;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.api.onImageColorListener;
import com.hi.music.player.javabean.BoxDownloadSong;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.api.onImageColorListener;
import com.offline.music.playermp3.javabean.BoxDownloadSong;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.NavigableSet;
import java.util.TreeSet;
import okhttp3.ResponseBody;
public class CommonUtils {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.helper;
package com.offline.music.playermp3.helper;
import android.graphics.Rect;
import android.view.View;
@ -9,7 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import com.hi.music.player.MusicApplication;
import com.offline.music.playermp3.MusicApplication;
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 com.hi.music.player.javabean.A_data.AudioItem;
import com.hi.music.player.javabean.A_data.Category;
import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.offline.music.playermp3.javabean.A_data.Category;
import org.json.JSONArray;
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 {

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.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.appcompat.app.AppCompatActivity;
@ -6,8 +6,6 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import com.hi.music.player.MusicApplication;
public class ViewModelScope {
private ViewModelProvider mFragmentProvider;
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;

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;

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.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.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;

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 {

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;

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;

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;

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.hi.music.player.javabean.requestbody.child.ContextBody;
import com.offline.music.playermp3.javabean.requestbody.child.ContextBody;
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.hi.music.player.javabean.requestbody.child.ContextBody;
import com.offline.music.playermp3.javabean.requestbody.child.ContextBody;
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.util.Locale;

View File

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

View File

@ -1,6 +1,4 @@
package com.hi.music.player.javabean.response;
import com.hi.music.player.javabean.response.child.ResponseCategoryListChild;
package com.offline.music.playermp3.javabean.response;
import java.io.Serializable;
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 com.hi.music.player.javabean.response.child.ResponseHomeChild;
import com.offline.music.playermp3.javabean.response.child.ResponseHomeChild;
import java.util.List;

View File

@ -1,6 +1,4 @@
package com.hi.music.player.javabean.response;
import com.hi.music.player.helper.MyValue;
package com.offline.music.playermp3.javabean.response;
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;

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;

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;

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;

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 {
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;

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 {
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 {

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;

View File

@ -1,37 +1,15 @@
package com.hi.music.player.media3;
import android.net.Uri;
package com.offline.music.playermp3.media3;
import androidx.media3.common.MediaItem;
import androidx.media3.common.util.UnstableApi;
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.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.drm.DrmSessionManagerProvider;
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory;
import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.source.MediaSourceFactory;
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.api.RequestListener;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.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;
import com.offline.music.playermp3.helper.CommonUtils;
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;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.media3;
package com.offline.music.playermp3.media3;
import android.content.Context;
@ -8,7 +8,7 @@ import androidx.media3.database.StandaloneDatabaseProvider;
import androidx.media3.datasource.cache.NoOpCacheEvictor;
import androidx.media3.datasource.cache.SimpleCache;
import com.hi.music.player.MusicApplication;
import com.offline.music.playermp3.MusicApplication;
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.content.Context;
@ -18,11 +18,11 @@ import androidx.media3.exoplayer.offline.DownloadNotificationHelper;
import androidx.media3.exoplayer.offline.DownloadService;
import androidx.media3.exoplayer.scheduler.Scheduler;
import com.hi.music.player.R;
import com.hi.music.player.api.onCheckDownload;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.CustomerDownload;
import com.hi.music.player.ui.activity.viewmodel.VMApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.api.onCheckDownload;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.CustomerDownload;
import com.offline.music.playermp3.ui.activity.viewmodel.VMApplication;
import java.util.ArrayList;
import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.media3;
package com.offline.music.playermp3.media3;
import android.content.ComponentName;
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.MoreExecutors;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.api.MediaControllerListener;
import com.hi.music.player.api.MediaControllerStatusListener;
import com.hi.music.player.api.OnHasUrlAction;
import com.hi.music.player.api.onCheckDownload;
import com.hi.music.player.api.onPlayNextListener;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.CustomerDownload;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.ResponsePlayUrl;
import com.hi.music.player.network.RetrofitManager;
import com.hi.music.player.ui.activity.viewmodel.VMApplication;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.api.MediaControllerListener;
import com.offline.music.playermp3.api.MediaControllerStatusListener;
import com.offline.music.playermp3.api.OnHasUrlAction;
import com.offline.music.playermp3.api.onCheckDownload;
import com.offline.music.playermp3.api.onPlayNextListener;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.helper.MyValue;
import com.offline.music.playermp3.javabean.CustomerDownload;
import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.offline.music.playermp3.javabean.response.ResponsePlayUrl;
import com.offline.music.playermp3.network.RetrofitManager;
import com.offline.music.playermp3.ui.activity.viewmodel.VMApplication;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.media3;
package com.offline.music.playermp3.media3;
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.Intent;
@ -14,21 +14,17 @@ import androidx.media3.datasource.DataSpec;
import androidx.media3.datasource.DefaultDataSource;
import androidx.media3.datasource.DefaultHttpDataSource;
import androidx.media3.datasource.ResolvingDataSource;
import androidx.media3.datasource.TransferListener;
import androidx.media3.datasource.cache.CacheDataSource;
import androidx.media3.datasource.cache.SimpleCache;
import androidx.media3.exoplayer.DefaultLoadControl;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory;
import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
import androidx.media3.session.MediaSession;
import androidx.media3.session.MediaSessionService;
import com.hi.music.player.helper.CommonUtils;
import java.io.IOException;
import com.offline.music.playermp3.helper.CommonUtils;
public class PlaybackService extends MediaSessionService {
private MediaSession mediaSession = null;

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.datasource.DataSource;
import androidx.media3.exoplayer.drm.DrmSessionManagerProvider;
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 {

View File

@ -1,26 +1,25 @@
package com.hi.music.player.network;
package com.offline.music.playermp3.network;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponseCategoryList;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.ResponsePlayUrl;
import com.hi.music.player.javabean.response.ResponseResult;
import com.hi.music.player.javabean.response.ResponseResultList;
import com.hi.music.player.javabean.response.ResponseSearch;
import com.hi.music.player.javabean.response.child.ResponseCategory;
import com.hi.music.player.javabean.response.ResponseHome;
import com.hi.music.player.javabean.response.child.ResponseHomeChild;
import com.hi.music.player.javabean.response.child.ResponseResultListChild;
import com.hi.music.player.javabean.response.child.ResponseSearchChild;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.helper.MyValue;
import com.offline.music.playermp3.javabean.response.ResponseCategoryList;
import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.offline.music.playermp3.javabean.response.ResponsePlayUrl;
import com.offline.music.playermp3.javabean.response.ResponseResult;
import com.offline.music.playermp3.javabean.response.ResponseResultList;
import com.offline.music.playermp3.javabean.response.ResponseSearch;
import com.offline.music.playermp3.javabean.response.child.ResponseCategory;
import com.offline.music.playermp3.javabean.response.ResponseHome;
import com.offline.music.playermp3.javabean.response.child.ResponseHomeChild;
import com.offline.music.playermp3.javabean.response.child.ResponseResultListChild;
import com.offline.music.playermp3.javabean.response.child.ResponseSearchChild;
import com.offline.music.playermp3.javabean.response.child.ResponseSingle;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

View File

@ -1,10 +1,9 @@
package com.hi.music.player.network;
package com.offline.music.playermp3.network;
import io.reactivex.Observable;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.POST;

View File

@ -1,7 +1,7 @@
package com.hi.music.player.network;
package com.offline.music.playermp3.network;
import com.hi.music.player.api.RequestListener;
import com.hi.music.player.helper.CommonUtils;
import com.offline.music.playermp3.api.RequestListener;
import com.offline.music.playermp3.helper.CommonUtils;
import org.json.JSONException;
import org.json.JSONObject;

View File

@ -1,15 +1,14 @@
package com.hi.music.player.network;
package com.offline.music.playermp3.network;
import com.google.gson.Gson;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.api.RequestListener;
import com.hi.music.player.javabean.requestbody.BodyHome;
import com.hi.music.player.javabean.requestbody.BodyPlay;
import com.hi.music.player.javabean.requestbody.BodyPlayUrl;
import com.hi.music.player.javabean.requestbody.BodySearch;
import com.hi.music.player.javabean.requestbody.BodySearchSuggestion;
import com.hi.music.player.javabean.requestbody.child.Client;
import com.hi.music.player.javabean.requestbody.child.ContextBody;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.api.RequestListener;
import com.offline.music.playermp3.javabean.requestbody.BodyHome;
import com.offline.music.playermp3.javabean.requestbody.BodyPlay;
import com.offline.music.playermp3.javabean.requestbody.BodyPlayUrl;
import com.offline.music.playermp3.javabean.requestbody.BodySearch;
import com.offline.music.playermp3.javabean.requestbody.BodySearchSuggestion;
import com.offline.music.playermp3.javabean.requestbody.child.Client;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;

View File

@ -1,14 +1,14 @@
package com.hi.music.player.objectbox;
package com.offline.music.playermp3.objectbox;
import android.content.Context;
import androidx.annotation.NonNull;
import com.hi.music.player.api.LikeSongListener;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.javabean.BoxLikeSong;
import com.hi.music.player.javabean.BoxLikeSong_;
import com.hi.music.player.javabean.MyObjectBox;
import com.offline.music.playermp3.api.LikeSongListener;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.javabean.BoxLikeSong;
import com.offline.music.playermp3.javabean.BoxLikeSong_;
import com.offline.music.playermp3.javabean.MyObjectBox;
import java.util.List;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.service;
package com.offline.music.playermp3.service;
import android.app.Notification;
import android.app.NotificationChannel;
@ -24,9 +24,9 @@ import androidx.core.app.NotificationCompat;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.hi.music.player.R;
import com.hi.music.player.javabean.A_data.AudioItem;
import com.hi.music.player.ui.activity.A_PlayActivity;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.offline.music.playermp3.ui.activity.A_PlayActivity;
import java.io.File;
import java.io.IOException;
@ -101,8 +101,8 @@ public class MusicPlayerForegroundService extends Service {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ? PendingIntent.FLAG_IMMUTABLE : 0); // 适配Android 12
return new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("正在播放音频") // 通知标题
.setContentText("您的音频正在播放") // 通知内容
.setContentTitle("Playing audio") // 通知标题
.setContentText("Your audio is playing") // 通知内容
.setSmallIcon(R.drawable.home_select) // 小图标
.setContentIntent(pendingIntent) // 点击通知的Intent
.setPriority(NotificationCompat.PRIORITY_LOW) // 低优先级
@ -113,7 +113,7 @@ public class MusicPlayerForegroundService extends Service {
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel serviceChannel = new NotificationChannel(
CHANNEL_ID, "音乐播放器频道", NotificationManager.IMPORTANCE_LOW);
CHANNEL_ID, "Music player channel", NotificationManager.IMPORTANCE_LOW);
NotificationManager manager = getSystemService(NotificationManager.class);
if (manager != null) {
manager.createNotificationChannel(serviceChannel); // 创建渠道
@ -190,7 +190,7 @@ public class MusicPlayerForegroundService extends Service {
if (afd != null) {
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); // 设置数据源
} else {
throw new IOException("无法打开内容URI: " + path);
throw new IOException("Unable to open the content URI: " + path);
}
} catch (SecurityException e) {
Log.e("MusicPlayerService", "权限被拒绝无法访问内容URI: " + path, e);
@ -208,7 +208,7 @@ public class MusicPlayerForegroundService extends Service {
if (file.exists()) {
mediaPlayer.setDataSource(file.getAbsolutePath()); // 从文件加载
} else {
throw new IOException("文件未找到: " + path);
throw new IOException("File not found: " + path);
}
}
}
@ -225,7 +225,7 @@ public class MusicPlayerForegroundService extends Service {
return (dotIndex > 0) ? fileName.substring(0, dotIndex) : fileName;
} catch (Exception e) {
Log.e("MusicPlayerService", "获取文件名失败", e);
return "未知文件"; // 默认文件名
return "Unknown file"; // 默认文件名
}
}
@ -249,7 +249,7 @@ public class MusicPlayerForegroundService extends Service {
} else {
pauseAudio(); // 时间到暂停音乐
isPlaying.postValue(false); // 更新播放状态
Toast.makeText(getApplicationContext(), "定时器结束", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "Timer end", Toast.LENGTH_SHORT).show();
stopTimer(); // 时间到结束计时器
}
}

View File

@ -1,24 +1,22 @@
package com.hi.music.player.ui.activity;
package com.offline.music.playermp3.ui.activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import com.hi.music.player.R;
import com.hi.music.player.adapter.A_HomeViewPagerAdapter;
import com.hi.music.player.databinding.ActivityAhomeBinding;
import com.hi.music.player.databinding.HomeTabCustomBinding;
import com.hi.music.player.javabean.A_data.AudioItem;
import com.hi.music.player.service.MusicPlayerForegroundService;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.adapter.A_HomeViewPagerAdapter;
import com.offline.music.playermp3.databinding.ActivityAhomeBinding;
import com.offline.music.playermp3.databinding.HomeTabCustomBinding;
import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.offline.music.playermp3.service.MusicPlayerForegroundService;
import java.util.Locale;

View File

@ -1,4 +1,4 @@
package com.hi.music.player.ui.activity;
package com.offline.music.playermp3.ui.activity;
import android.content.ComponentName;
import android.content.Context;
@ -11,7 +11,6 @@ import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
@ -22,7 +21,6 @@ import android.view.View;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -32,10 +30,10 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.hi.music.player.R;
import com.hi.music.player.databinding.ActivityAplayBinding;
import com.hi.music.player.javabean.A_data.AudioItem;
import com.hi.music.player.service.MusicPlayerForegroundService;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.databinding.ActivityAplayBinding;
import com.offline.music.playermp3.javabean.A_data.AudioItem;
import com.offline.music.playermp3.service.MusicPlayerForegroundService;
import java.util.ArrayList;
import java.util.List;
@ -59,6 +57,7 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
// 设置观察者
musicService.getIsPlaying().observe(A_PlayActivity.this, this::updatePlayButton);
musicService.getFileName().observe(A_PlayActivity.this, vb.songTitle::setText);
// 更新进度条和时间
@ -100,6 +99,10 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
loadBackgroundPreference(); // 加载之前保存的背景状态
updateSeekBarAndTime();
if (musicService != null) {
musicService.startUpdatingProgress();
}
// 从Intent获取音频项
AudioItem audioItem = (AudioItem) getIntent().getSerializableExtra("Path");
@ -108,6 +111,8 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
return;
}
Log.d("paly","-----" +audioItem.getName());
Glide.with(this)
.load("file:///android_asset/" + audioItem.getImage())
.placeholder(R.mipmap.playing_background) // 默认图片
@ -120,7 +125,7 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
// 对图片进行高斯模糊处理
Bitmap blurredBitmap = blurBitmap(A_PlayActivity.this, resource,5);
Bitmap blurredBitmap = blurBitmap(A_PlayActivity.this, resource, 5);
// 将模糊后的图片作为背景设置到 vb.topContainer
Drawable blurredDrawable = new BitmapDrawable(getResources(), blurredBitmap);
@ -134,7 +139,6 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
});
startMusicService(audioItem); // 启动音乐服务
setupPlayButtonClickListener(); // 设置播放按钮的点击事件
@ -210,21 +214,21 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
// 更新进度条和时间显示
private void updateSeekBarAndTime() {
if (isBound && musicService != null) {
if (isBound && musicService!= null) {
// 观察当前播放进度
musicService.getCurrentPositionLiveData().observe(this, position -> {
if (musicService.getDurationLiveData().getValue() != null) {
int duration = musicService.getDurationLiveData().getValue();
if (duration > 0) {
vb.songSeekbar.setProgress((int) ((position / (float) duration) * 100));
vb.current.setText(formatTime(position));
}
Integer duration = musicService.getDurationLiveData().getValue();
if (duration!= null && duration > 0) {
vb.songSeekbar.setProgress((int) ((position / (float) duration) * 100));
vb.current.setText(formatTime(position));
}
});
// 观察音频总时长
musicService.getDurationLiveData().observe(this, duration -> {
vb.time.setText(formatTime(duration));
if (duration!= null) {
vb.time.setText(formatTime(duration));
}
});
}
}
@ -279,7 +283,6 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
}
// 保存背景状态到SharedPreferences
private void saveBackgroundPreference() {
SharedPreferences sharedPreferences = getSharedPreferences("AppPreferences", MODE_PRIVATE);

View File

@ -1,9 +1,9 @@
package com.hi.music.player.ui.activity;
package com.offline.music.playermp3.ui.activity;
import android.view.View;
import com.hi.music.player.databinding.ActivityAsettingBinding;
import com.hi.music.player.helper.SettingUtil;
import com.offline.music.playermp3.databinding.ActivityAsettingBinding;
import com.offline.music.playermp3.helper.SettingUtil;
public class A_SettingActivity extends BaseActivity<ActivityAsettingBinding> {
@ -40,6 +40,10 @@ public class A_SettingActivity extends BaseActivity<ActivityAsettingBinding> {
SettingUtil.openTermsOfService(this);
});
vb.back.setOnClickListener(v -> {
finish();
});
}

View File

@ -1,12 +1,12 @@
package com.hi.music.player.ui.activity;
package com.offline.music.playermp3.ui.activity;
import android.content.Intent;
import android.os.CountDownTimer;
import android.view.View;
import com.hi.music.player.databinding.ActivityAsplashBinding;
import com.hi.music.player.firebase.RemoteConfigJava;
import com.hi.music.player.firebase.Sp;
import com.offline.music.playermp3.databinding.ActivityAsplashBinding;
import com.offline.music.playermp3.firebase.RemoteConfigJava;
import com.offline.music.playermp3.firebase.Sp;
public class A_SplashActivity extends BaseActivity<ActivityAsplashBinding> {
@ -46,7 +46,7 @@ public class A_SplashActivity extends BaseActivity<ActivityAsplashBinding> {
return false;
}
public void intData(){
public void intData() {
countDownTimer = new CountDownTimer(SPLASH_TIME_OUT, 100) {

View File

@ -1,4 +1,4 @@
package com.hi.music.player.ui.activity;
package com.offline.music.playermp3.ui.activity;
import android.content.Intent;
import android.net.Uri;
@ -25,16 +25,16 @@ import androidx.viewbinding.ViewBinding;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.api.onPlayNextListener;
import com.hi.music.player.databinding.ActivityBaseBinding;
import com.hi.music.player.databinding.LayoutPanelBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.helper.ViewModelScope;
import com.hi.music.player.media3.MyMediaControllerManager;
import com.hi.music.player.ui.activity.viewmodel.VMApplication;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.api.onPlayNextListener;
import com.offline.music.playermp3.databinding.ActivityBaseBinding;
import com.offline.music.playermp3.databinding.LayoutPanelBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.helper.MyValue;
import com.offline.music.playermp3.helper.ViewModelScope;
import com.offline.music.playermp3.media3.MyMediaControllerManager;
import com.offline.music.playermp3.ui.activity.viewmodel.VMApplication;
public abstract class BaseActivity<T extends ViewBinding> extends AppCompatActivity implements View.OnClickListener {

View File

@ -1,48 +1,34 @@
package com.hi.music.player.ui.activity;
package com.offline.music.playermp3.ui.activity;
import static com.bumptech.glide.request.RequestOptions.bitmapTransform;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.OptIn;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.media3.common.util.UnstableApi;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.view.View;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.hi.music.player.MusicApplication;
import com.hi.music.player.R;
import com.hi.music.player.adapter.AdapterCategoryList;
import com.hi.music.player.api.HomeItemClickListener;
import com.hi.music.player.api.onImageColorListener;
import com.hi.music.player.databinding.ActivityCategoryListBinding;
import com.hi.music.player.databinding.ActivityHomeBinding;
import com.hi.music.player.helper.CommonUtils;
import com.hi.music.player.helper.MyValue;
import com.hi.music.player.javabean.response.ResponseCategoryList;
import com.hi.music.player.javabean.response.ResponsePlayListInfo;
import com.hi.music.player.javabean.response.child.ResponseCategory;
import com.hi.music.player.javabean.response.child.ResponseSingle;
import com.hi.music.player.ui.activity.viewmodel.VMApplication;
import com.hi.music.player.ui.fragmnt.viewmodel.VMCategoryList;
import com.hi.music.player.ui.fragmnt.viewmodel.VMHome;
import java.io.Serializable;
import com.offline.music.playermp3.MusicApplication;
import com.offline.music.playermp3.R;
import com.offline.music.playermp3.adapter.AdapterCategoryList;
import com.offline.music.playermp3.api.HomeItemClickListener;
import com.offline.music.playermp3.databinding.ActivityCategoryListBinding;
import com.offline.music.playermp3.databinding.ActivityHomeBinding;
import com.offline.music.playermp3.helper.CommonUtils;
import com.offline.music.playermp3.helper.MyValue;
import com.offline.music.playermp3.javabean.response.ResponseCategoryList;
import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo;
import com.offline.music.playermp3.ui.fragmnt.viewmodel.VMCategoryList;
import jp.wasabeef.glide.transformations.BlurTransformation;

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