@ -6,26 +6,25 @@ plugins {
|
||||
// id("org.jetbrains.kotlin.android")
|
||||
// id ("kotlin-kapt")
|
||||
id("io.objectbox")
|
||||
id("com.google.gms.google-services")
|
||||
id("com.google.firebase.crashlytics")
|
||||
}
|
||||
|
||||
val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
|
||||
|
||||
android {
|
||||
namespace = "com.offline.music.playermp3"
|
||||
namespace = "com.offline.music.player"
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
//com.hi.music.player
|
||||
applicationId = "com.offline.music.playermp3"
|
||||
applicationId = "com.offline.music.player"
|
||||
minSdk = 23
|
||||
targetSdk = 34
|
||||
versionCode = 1
|
||||
versionName = "1.0.0"
|
||||
|
||||
setProperty(
|
||||
"archivesBaseName",
|
||||
"Offline Music Player" + versionName + "(${versionCode})_$timestamp"
|
||||
)
|
||||
setProperty("archivesBaseName", "Offline Music Player" + versionName + "(${versionCode})_$timestamp")
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
@ -76,7 +75,7 @@ dependencies {
|
||||
implementation("com.github.bumptech.glide:glide:4.16.0")
|
||||
// kapt("com.github.bumptech.glide:compiler:4.16.0")
|
||||
// Glide 的图片变换库,包括高斯模糊
|
||||
implementation("jp.wasabeef:glide-transformations:4.3.0")
|
||||
implementation ("jp.wasabeef:glide-transformations:4.3.0")
|
||||
|
||||
|
||||
//提取图片主色
|
||||
@ -94,7 +93,14 @@ dependencies {
|
||||
//----------media3
|
||||
|
||||
|
||||
|
||||
// implementation ("com.geyifeng.immersionbar:immersionbar:3.2.2")
|
||||
// implementation ("com.geyifeng.immersionbar:immersionbar-components:3.2.2")
|
||||
|
||||
|
||||
//------------------firebase
|
||||
implementation(platform("com.google.firebase:firebase-bom:33.1.1"))
|
||||
implementation("com.google.firebase:firebase-crashlytics")
|
||||
implementation("com.google.firebase:firebase-analytics")
|
||||
implementation("com.google.firebase:firebase-config")
|
||||
}
|
||||
29
app/google-services.json
Normal file
@ -0,0 +1,29 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "550960818622",
|
||||
"project_id": "himelody-and",
|
||||
"storage_bucket": "himelody-and.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:550960818622:android:96fd4141e43410fb24f1ef",
|
||||
"android_client_info": {
|
||||
"package_name": "com.offline.music.player"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyCp3XR60onMqiGj9pD8ADmrDEOOn__sQDk"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": []
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
2
app/proguard-rules.pro
vendored
@ -29,7 +29,7 @@
|
||||
-dontwarn retrofit2.**
|
||||
-dontwarn javax.annotation.Nullable
|
||||
|
||||
-keep class com.offline.music.playermp3.javabean.A_data.AudioItem { *; }
|
||||
-keep class com.offline.music.player.javabean.A_data.AudioItem { *; }
|
||||
|
||||
# 保持 Context、Intent 和权限相关的公共方法
|
||||
-keep class android.content.Context { *; }
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3;
|
||||
package com.offline.music.player;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
@ -17,9 +17,9 @@
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@drawable/music_player_launch"
|
||||
android:icon="@mipmap/logo"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@drawable/music_player_launch"
|
||||
android:roundIcon="@mipmap/logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.MusicApp"
|
||||
tools:targetApi="31">
|
||||
|
||||
|
Before Width: | Height: | Size: 41 KiB |
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3;
|
||||
package com.offline.music.player;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
@ -1,12 +1,12 @@
|
||||
package com.offline.music.playermp3.adapter;
|
||||
package com.offline.music.player.adapter;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||
|
||||
import com.offline.music.playermp3.ui.fragmnt.A_HomeFragment;
|
||||
import com.offline.music.playermp3.ui.fragmnt.A_ImportFragment;
|
||||
import com.offline.music.player.ui.fragmnt.A_HomeFragment;
|
||||
import com.offline.music.player.ui.fragmnt.A_ImportFragment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.adapter;
|
||||
package com.offline.music.player.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@ -12,22 +12,23 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
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 com.offline.music.player.R;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.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, String newName) {
|
||||
public A_ImportFragmentAdapter(Context context,String newName) {
|
||||
this.context = context;
|
||||
this.newName = newName;
|
||||
}
|
||||
@ -40,31 +41,22 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
||||
AudioItem audioItem1 = audioFiles.get(position);
|
||||
audioItem = audioFiles.get(position);
|
||||
|
||||
holder.title.setText(audioItem1.getName());
|
||||
holder.time.setText(audioItem1.getDuration());
|
||||
Log.d("Adapter", "onBindViewHolder: " + audioItem1.getDuration());
|
||||
holder.title.setText(audioItem.getName());
|
||||
holder.time.setText(audioItem.getDuration());
|
||||
Log.d("Adapter", "onBindViewHolder: " + audioItem.getDuration());
|
||||
|
||||
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.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("Path", audioItem);
|
||||
intent.putExtra("newName",newName);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
holder.bind(audioItem1); // 通过 bind 方法将 audioItem1 传递到 ViewHolder
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -82,6 +74,7 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
|
||||
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 方法
|
||||
@ -102,12 +95,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);
|
||||
@ -118,15 +111,13 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
|
||||
|
||||
option.setOnClickListener(v -> {
|
||||
int position = getAdapterPosition();
|
||||
if (position != RecyclerView.NO_POSITION && onOptionClickListener != null && audioItem != null) {
|
||||
if (position != RecyclerView.NO_POSITION && onOptionClickListener != null) {
|
||||
onOptionClickListener.onOptionClick(position, audioItem.getFile(), option);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 添加 bind 方法,将 audioItem 传递给 ViewHolder
|
||||
public void bind(AudioItem audioItem) {
|
||||
this.audioItem = audioItem;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.adapter;
|
||||
package com.offline.music.player.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.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 com.offline.music.player.R;
|
||||
import com.offline.music.player.helper.AudioItemDiffCallback;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.ui.activity.A_PlayActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.adapter;
|
||||
package com.offline.music.player.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.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 com.offline.music.player.R;
|
||||
import com.offline.music.player.helper.AudioItemDiffCallback;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.ui.activity.A_PlayActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.adapter;
|
||||
package com.offline.music.player.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.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 com.offline.music.player.R;
|
||||
import com.offline.music.player.helper.AudioItemDiffCallback;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.ui.activity.A_PlayActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -1,8 +1,8 @@
|
||||
package com.offline.music.playermp3.helper;
|
||||
package com.offline.music.player.helper;
|
||||
|
||||
import androidx.recyclerview.widget.DiffUtil;
|
||||
|
||||
import com.offline.music.playermp3.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.helper;
|
||||
package com.offline.music.player.helper;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.helper;
|
||||
package com.offline.music.player.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.offline.music.playermp3.MusicApplication;
|
||||
import com.offline.music.player.MusicApplication;
|
||||
|
||||
public class ItemDecoration extends RecyclerView.ItemDecoration {
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package com.offline.music.playermp3.helper;
|
||||
package com.offline.music.player.helper;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.offline.music.playermp3.javabean.A_data.AudioItem;
|
||||
import com.offline.music.playermp3.javabean.A_data.Category;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.javabean.A_data.Category;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.helper;
|
||||
package com.offline.music.player.helper;
|
||||
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.javabean.A_data;
|
||||
package com.offline.music.player.javabean.A_data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.javabean.A_data;
|
||||
package com.offline.music.player.javabean.A_data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.service;
|
||||
package com.offline.music.player.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.offline.music.playermp3.R;
|
||||
import com.offline.music.playermp3.javabean.A_data.AudioItem;
|
||||
import com.offline.music.playermp3.ui.activity.A_PlayActivity;
|
||||
import com.offline.music.player.R;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.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("Playing audio") // 通知标题
|
||||
.setContentText("Your audio is playing") // 通知内容
|
||||
.setContentTitle("正在播放音频") // 通知标题
|
||||
.setContentText("您的音频正在播放") // 通知内容
|
||||
.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, "Music player channel", NotificationManager.IMPORTANCE_LOW);
|
||||
CHANNEL_ID, "音乐播放器频道", 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("Unable to open the content URI: " + path);
|
||||
throw new IOException("无法打开内容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("File not found: " + path);
|
||||
throw new IOException("文件未找到: " + 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 "Unknown file"; // 默认文件名
|
||||
return "未知文件"; // 默认文件名
|
||||
}
|
||||
}
|
||||
|
||||
@ -249,7 +249,7 @@ public class MusicPlayerForegroundService extends Service {
|
||||
} else {
|
||||
pauseAudio(); // 时间到,暂停音乐
|
||||
isPlaying.postValue(false); // 更新播放状态
|
||||
Toast.makeText(getApplicationContext(), "Timer end", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), "定时器结束", Toast.LENGTH_SHORT).show();
|
||||
stopTimer(); // 时间到,结束计时器
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.ui.activity;
|
||||
package com.offline.music.player.ui.activity;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
@ -11,12 +11,12 @@ import android.view.View;
|
||||
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
import com.google.android.material.tabs.TabLayoutMediator;
|
||||
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 com.offline.music.player.R;
|
||||
import com.offline.music.player.adapter.A_HomeViewPagerAdapter;
|
||||
import com.offline.music.player.databinding.ActivityAhomeBinding;
|
||||
import com.offline.music.player.databinding.HomeTabCustomBinding;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.service.MusicPlayerForegroundService;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.ui.activity;
|
||||
package com.offline.music.player.ui.activity;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
@ -30,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.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 com.offline.music.player.R;
|
||||
import com.offline.music.player.databinding.ActivityAplayBinding;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.service.MusicPlayerForegroundService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -111,8 +111,6 @@ 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) // 默认图片
|
||||
@ -1,9 +1,9 @@
|
||||
package com.offline.music.playermp3.ui.activity;
|
||||
package com.offline.music.player.ui.activity;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import com.offline.music.playermp3.databinding.ActivityAsettingBinding;
|
||||
import com.offline.music.playermp3.helper.SettingUtil;
|
||||
import com.offline.music.player.databinding.ActivityAsettingBinding;
|
||||
import com.offline.music.player.helper.SettingUtil;
|
||||
|
||||
public class A_SettingActivity extends BaseActivity<ActivityAsettingBinding> {
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
package com.offline.music.playermp3.ui.activity;
|
||||
package com.offline.music.player.ui.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.CountDownTimer;
|
||||
import android.view.View;
|
||||
|
||||
import com.offline.music.playermp3.databinding.ActivityAsplashBinding;
|
||||
import com.offline.music.player.databinding.ActivityAsplashBinding;
|
||||
|
||||
|
||||
public class A_SplashActivity extends BaseActivity<ActivityAsplashBinding> {
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.ui.activity;
|
||||
package com.offline.music.player.ui.activity;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
@ -11,7 +11,7 @@ import androidx.core.view.WindowCompat;
|
||||
import androidx.core.view.WindowInsetsControllerCompat;
|
||||
import androidx.viewbinding.ViewBinding;
|
||||
|
||||
import com.offline.music.playermp3.databinding.ActivityBaseBinding;
|
||||
import com.offline.music.player.databinding.ActivityBaseBinding;
|
||||
|
||||
public abstract class BaseActivity<T extends ViewBinding> extends AppCompatActivity implements View.OnClickListener {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.ui.activity.viewmodel;
|
||||
package com.offline.music.player.ui.activity.viewmodel;
|
||||
|
||||
import android.app.Application;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.ui.activity.viewmodel;
|
||||
package com.offline.music.player.ui.activity.viewmodel;
|
||||
|
||||
import android.app.Application;
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
package com.offline.music.playermp3.ui.fragmnt;
|
||||
package com.offline.music.player.ui.fragmnt;
|
||||
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.offline.music.playermp3.adapter.A_InstrumentAdapter;
|
||||
import com.offline.music.playermp3.adapter.A_NatureAdapter;
|
||||
import com.offline.music.playermp3.adapter.A_WhiteAdapter;
|
||||
import com.offline.music.playermp3.databinding.FragmentAHomeBinding;
|
||||
import com.offline.music.playermp3.helper.ItemDecoration;
|
||||
import com.offline.music.playermp3.ui.fragmnt.viewmodel.A_VMHome;
|
||||
import com.offline.music.player.adapter.A_InstrumentAdapter;
|
||||
import com.offline.music.player.adapter.A_NatureAdapter;
|
||||
import com.offline.music.player.adapter.A_WhiteAdapter;
|
||||
import com.offline.music.player.databinding.FragmentAHomeBinding;
|
||||
import com.offline.music.player.helper.ItemDecoration;
|
||||
import com.offline.music.player.ui.fragmnt.viewmodel.A_VMHome;
|
||||
|
||||
|
||||
public class A_HomeFragment extends BaseFragment<FragmentAHomeBinding> {
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.ui.fragmnt;
|
||||
package com.offline.music.player.ui.fragmnt;
|
||||
|
||||
import static android.app.Activity.RESULT_OK;
|
||||
|
||||
@ -9,7 +9,6 @@ import android.content.UriPermission;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.media.MediaMetadataRetriever;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
@ -29,12 +28,12 @@ import androidx.core.content.ContextCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.offline.music.playermp3.R;
|
||||
import com.offline.music.playermp3.adapter.A_ImportFragmentAdapter;
|
||||
import com.offline.music.playermp3.databinding.FragmentAImportBinding;
|
||||
import com.offline.music.playermp3.javabean.A_data.AudioItem;
|
||||
import com.offline.music.playermp3.ui.activity.A_SettingActivity;
|
||||
import com.offline.music.playermp3.ui.fragmnt.viewmodel.A_VMImport;
|
||||
import com.offline.music.player.R;
|
||||
import com.offline.music.player.adapter.A_ImportFragmentAdapter;
|
||||
import com.offline.music.player.databinding.FragmentAImportBinding;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.ui.activity.A_SettingActivity;
|
||||
import com.offline.music.player.ui.fragmnt.viewmodel.A_VMImport;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -213,6 +212,7 @@ public class A_ImportFragment extends BaseFragment<FragmentAImportBinding> {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void openAudioPicker() {
|
||||
if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
|
||||
Toast.makeText(getContext(), "The external storage is unavailable", Toast.LENGTH_LONG).show();
|
||||
@ -237,39 +237,15 @@ public class A_ImportFragment extends BaseFragment<FragmentAImportBinding> {
|
||||
requireActivity().getContentResolver().takePersistableUriPermission(
|
||||
selectedAudioUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
|
||||
// 检查音频时长
|
||||
long duration = 0;
|
||||
try {
|
||||
duration = getAudioDuration(selectedAudioUri);
|
||||
viewModel.addAudioFile(selectedAudioUri);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
if (duration < 4000) {
|
||||
Toast.makeText(requireContext(), "The audio duration cannot be less than 4 seconds", Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
try {
|
||||
viewModel.addAudioFile(selectedAudioUri); // 如果时长符合条件,添加音频文件
|
||||
} catch (IOException e) {
|
||||
Log.e("A_ImportFragment", "IOException while adding audio file", e);
|
||||
Toast.makeText(requireContext(), "An error occurred while adding the audio file", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private long getAudioDuration(Uri uri) throws IOException {
|
||||
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
|
||||
try {
|
||||
retriever.setDataSource(requireContext(), uri);
|
||||
String durationStr = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
|
||||
return Long.parseLong(durationStr); // 返回音频时长(毫秒)
|
||||
} finally {
|
||||
retriever.release(); // 释放资源
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.ui.fragmnt;
|
||||
package com.offline.music.player.ui.fragmnt;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
@ -1,13 +1,13 @@
|
||||
package com.offline.music.playermp3.ui.fragmnt.viewmodel;
|
||||
package com.offline.music.player.ui.fragmnt.viewmodel;
|
||||
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
|
||||
import com.offline.music.playermp3.MusicApplication;
|
||||
import com.offline.music.playermp3.helper.JsonUtils;
|
||||
import com.offline.music.playermp3.javabean.A_data.AudioItem;
|
||||
import com.offline.music.playermp3.javabean.A_data.Category;
|
||||
import com.offline.music.player.MusicApplication;
|
||||
import com.offline.music.player.helper.JsonUtils;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.javabean.A_data.Category;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3.ui.fragmnt.viewmodel;
|
||||
package com.offline.music.player.ui.fragmnt.viewmodel;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
@ -13,7 +13,7 @@ import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.offline.music.playermp3.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Type;
|
||||
|
Before Width: | Height: | Size: 16 KiB |
@ -1,74 +1,170 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector
|
||||
android:height="108dp"
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:viewportHeight="108"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
</vector>
|
||||
|
||||
@ -49,7 +49,7 @@
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<!-- 自定义圆形进度条 -->
|
||||
<com.offline.music.playermp3.helper.CircularProgressBar
|
||||
<com.offline.music.player.helper.CircularProgressBar
|
||||
android:id="@+id/circular_progress_bar"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
android:id="@+id/splash_image"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="150dp"
|
||||
android:src="@mipmap/music_logo"
|
||||
android:src="@mipmap/logo"
|
||||
app:layout_constraintBottom_toTopOf="@+id/splash_title"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 982 B |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/logo.jpg
Normal file
|
After Width: | Height: | Size: 267 KiB |
|
Before Width: | Height: | Size: 16 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/placeholder.jpg
Normal file
|
After Width: | Height: | Size: 454 KiB |
@ -1,4 +1,4 @@
|
||||
package com.offline.music.playermp3;
|
||||
package com.offline.music.player;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
@ -3,6 +3,10 @@ plugins {
|
||||
id("com.android.application") version "8.1.3" apply false
|
||||
// id("org.jetbrains.kotlin.android") version "1.9.22" apply false
|
||||
|
||||
|
||||
id("com.google.gms.google-services") version "4.3.15" apply false
|
||||
id ("com.google.firebase.crashlytics") version "2.9.2" apply false
|
||||
|
||||
}
|
||||
|
||||
buildscript {
|
||||
|
||||