更改包名应用名logo

This commit is contained in:
ocean 2024-06-03 15:12:46 +08:00
parent e501607528
commit e97a408286
201 changed files with 759 additions and 772 deletions

View File

@ -9,19 +9,19 @@ plugins {
}
android {
namespace = "relax.offline.music"
namespace = "melody.offline.music"
compileSdk = 34
defaultConfig {
applicationId = "relax.offline.mp3.music"
applicationId = "com.hi.melody.music.noise"
minSdk = 24
targetSdk = 34
versionCode = 4
versionName = "1.0.4"
versionCode = 1
versionName = "1.0.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
setProperty("archivesBaseName", "Musiclax_${defaultConfig.versionName}(${defaultConfig.versionCode})")
setProperty("archivesBaseName", "HiMelody_${defaultConfig.versionName}(${defaultConfig.versionCode})")
}
buildTypes {

View File

@ -1,21 +1,21 @@
{
"project_info": {
"project_number": "320083292372",
"project_id": "musiclax-and",
"storage_bucket": "musiclax-and.appspot.com"
"project_number": "550960818622",
"project_id": "himelody-and",
"storage_bucket": "himelody-and.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:320083292372:android:047dd51c4c373acf9a8b41",
"mobilesdk_app_id": "1:550960818622:android:96fd4141e43410fb24f1ef",
"android_client_info": {
"package_name": "relax.offline.mp3.music"
"package_name": "com.hi.melody.music.noise"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyCs8V_b7UYuUfcs_mAWIAbr06VZKBM-680"
"current_key": "AIzaSyCp3XR60onMqiGj9pD8ADmrDEOOn__sQDk"
}
],
"services": {

View File

@ -1,4 +1,4 @@
package relax.offline.music
package melody.offline.music
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4

View File

@ -19,7 +19,7 @@
<application
android:name="relax.offline.music.App"
android:name="melody.offline.music.App"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
@ -27,7 +27,7 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/app_logo"
android:supportsRtl="true"
android:theme="@style/Theme.Musiclax"
android:theme="@style/Theme.HiMelody"
tools:targetApi="31">
<activity
android:name=".activity.LaunchActivity"

View File

@ -1,30 +1,30 @@
package relax.offline.music
package melody.offline.music
import android.app.Application
import android.content.Context
import androidx.annotation.OptIn
import androidx.media3.common.util.UnstableApi
import relax.offline.music.bean.Audio
import relax.offline.music.bean.CurrentPlayingAudio
import relax.offline.music.bean.ResourcesList
import relax.offline.music.database.AppOfflineDBManager
import relax.offline.music.database.CurrentAudioManager
import relax.offline.music.database.DatabaseManager
import relax.offline.music.media.LocalMediaControllerManager
import relax.offline.music.media.MediaControllerManager
import relax.offline.music.util.CacheManager
import relax.offline.music.util.DownloadUtil
import relax.offline.music.util.parseResources
import melody.offline.music.bean.Audio
import melody.offline.music.bean.CurrentPlayingAudio
import melody.offline.music.bean.ResourcesList
import melody.offline.music.database.AppOfflineDBManager
import melody.offline.music.database.CurrentAudioManager
import melody.offline.music.database.DatabaseManager
import melody.offline.music.media.LocalMediaControllerManager
import melody.offline.music.media.MediaControllerManager
import melody.offline.music.util.CacheManager
import melody.offline.music.util.DownloadUtil
import melody.offline.music.util.parseResources
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import relax.offline.music.database.AppFavoriteDBManager
import relax.offline.music.firebase.RemoteConfig
import relax.offline.music.http.CommonIpInfoUtil
import relax.offline.music.http.UploadEventName
import relax.offline.music.util.AnalysisUtil
import relax.offline.music.util.AppLifecycleHandler
import melody.offline.music.database.AppFavoriteDBManager
import melody.offline.music.firebase.RemoteConfig
import melody.offline.music.http.CommonIpInfoUtil
import melody.offline.music.http.UploadEventName
import melody.offline.music.util.AnalysisUtil
import melody.offline.music.util.AppLifecycleHandler
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.concurrent.atomic.AtomicBoolean

View File

@ -1,9 +1,9 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.os.Bundle
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.databinding.ActivityAboutBinding
import relax.offline.music.util.getAppVersion
import melody.offline.music.databinding.ActivityAboutBinding
import melody.offline.music.util.getAppVersion
class AboutActivity : BaseActivity() {

View File

@ -1,4 +1,4 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

View File

@ -1,15 +1,14 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.content.Intent
import android.os.Bundle
import android.os.CountDownTimer
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.databinding.ActivityLaunchBinding
import relax.offline.music.util.AnalysisUtil
import melody.offline.music.databinding.ActivityLaunchBinding
import melody.offline.music.util.AnalysisUtil
class LaunchActivity : MoBaseActivity() {
private lateinit var binding: ActivityLaunchBinding
private val totalTime = 5000L // 5秒
private val totalTime = 8000L // 5秒
private val interval = 50L // 更新间隔,毫秒
private val steps = totalTime / interval
private val progressPerStep = 100f / steps.toFloat()

View File

@ -1,4 +1,4 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.content.Intent
import android.os.Bundle
@ -12,14 +12,13 @@ import androidx.fragment.app.FragmentTransaction
import androidx.media3.common.Player
import com.bumptech.glide.Glide
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R
import relax.offline.music.bean.Audio
import relax.offline.music.databinding.ActivityMainBinding
import relax.offline.music.fragment.HomeFragment
import relax.offline.music.fragment.ImportFragment
import relax.offline.music.media.LocalMediaControllerManager
import relax.offline.music.util.AnalysisUtil
import relax.offline.music.util.getAudioDurationFromAssets
import melody.offline.music.R
import melody.offline.music.bean.Audio
import melody.offline.music.databinding.ActivityMainBinding
import melody.offline.music.fragment.HomeFragment
import melody.offline.music.fragment.ImportFragment
import melody.offline.music.media.LocalMediaControllerManager
import melody.offline.music.util.getAudioDurationFromAssets
class MainActivity : BaseActivity() {
@ -52,11 +51,11 @@ class MainActivity : BaseActivity() {
super.onResume()
val currentPlayer = LocalMediaControllerManager.getController()
if (relax.offline.music.App.currentPlayingAudio == null) {
if (melody.offline.music.App.currentPlayingAudio == null) {
binding.playingStatusLayout.visibility = View.GONE
} else {
binding.playingStatusLayout.visibility = View.VISIBLE
val currentAudio = relax.offline.music.App.currentPlayingAudio
val currentAudio = melody.offline.music.App.currentPlayingAudio
val maxProgress = try {
getAudioDurationFromAssets(this, currentAudio?.file!!)
@ -97,7 +96,7 @@ class MainActivity : BaseActivity() {
updateBtnState(1)
}
binding.playingStatusLayout.setOnClickListener {
val currentAudio = relax.offline.music.App.currentPlayingAudio
val currentAudio = melody.offline.music.App.currentPlayingAudio
val duration = try {
getAudioDurationFromAssets(
this, currentAudio?.file!!
@ -131,7 +130,7 @@ class MainActivity : BaseActivity() {
}
updateProgressState()
} else {
LocalMediaControllerManager.setupMedia(this@MainActivity, relax.offline.music.App.currentPlayingAudio!!,
LocalMediaControllerManager.setupMedia(this@MainActivity, melody.offline.music.App.currentPlayingAudio!!,
object : Player.Listener {
override fun onPlayWhenReadyChanged(
playWhenReady: Boolean,

View File

@ -1,4 +1,4 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.content.Context
import android.graphics.Bitmap
@ -28,16 +28,16 @@ import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.json.JSONObject
import relax.offline.music.App
import relax.offline.music.R
import relax.offline.music.bean.FavoriteBean
import relax.offline.music.bean.OfflineBean
import relax.offline.music.http.getAppVersionCode
import relax.offline.music.media.MediaControllerManager
import relax.offline.music.sp.AppStore
import relax.offline.music.util.LogTag
import relax.offline.music.http.getCountryCode
import relax.offline.music.view.MusicPlayerView
import melody.offline.music.App
import melody.offline.music.R
import melody.offline.music.bean.FavoriteBean
import melody.offline.music.bean.OfflineBean
import melody.offline.music.http.getAppVersionCode
import melody.offline.music.media.MediaControllerManager
import melody.offline.music.sp.AppStore
import melody.offline.music.util.LogTag
import melody.offline.music.http.getCountryCode
import melody.offline.music.view.MusicPlayerView
@OptIn(UnstableApi::class)
abstract class MoBaseActivity : AppCompatActivity(), CoroutineScope by MainScope(),

View File

@ -1,4 +1,4 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.annotation.SuppressLint
import android.view.View
@ -7,10 +7,10 @@ import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select
import relax.offline.music.App
import relax.offline.music.adapter.LikedSongsAdapter
import relax.offline.music.bean.FavoriteBean
import relax.offline.music.databinding.ActivityLikedSongsBinding
import melody.offline.music.App
import melody.offline.music.adapter.LikedSongsAdapter
import melody.offline.music.bean.FavoriteBean
import melody.offline.music.databinding.ActivityLikedSongsBinding
class MoLikedSongsActivity : MoBaseActivity(), LikedSongsAdapter.OnItemFavoritesClickListener {

View File

@ -1,15 +1,15 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.annotation.SuppressLint
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import com.bumptech.glide.Glide
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.adapter.DetailsListAdapter
import relax.offline.music.databinding.ActivityDetailsBinding
import relax.offline.music.innertube.Innertube
import relax.offline.music.innertube.requests.moPlaylistPage
import relax.offline.music.util.LogTag.LogD
import melody.offline.music.adapter.DetailsListAdapter
import melody.offline.music.databinding.ActivityDetailsBinding
import melody.offline.music.innertube.Innertube
import melody.offline.music.innertube.requests.moPlaylistPage
import melody.offline.music.util.LogTag.LogD
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select

View File

@ -1,4 +1,4 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.annotation.SuppressLint
import android.view.View
@ -7,11 +7,10 @@ import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select
import relax.offline.music.App
import relax.offline.music.adapter.OfflineSongsAdapter
import relax.offline.music.bean.OfflineBean
import relax.offline.music.databinding.ActivityOfflineSongsBinding
import relax.offline.music.util.LogTag.LogD
import melody.offline.music.App
import melody.offline.music.adapter.OfflineSongsAdapter
import melody.offline.music.bean.OfflineBean
import melody.offline.music.databinding.ActivityOfflineSongsBinding
class MoOfflineSongsActivity : MoBaseActivity() {
private val requests: Channel<Request> = Channel(Channel.UNLIMITED)

View File

@ -1,4 +1,4 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.annotation.SuppressLint
import android.graphics.Bitmap
@ -15,7 +15,6 @@ import androidx.media3.common.PlaybackException
import androidx.media3.common.Player
import androidx.media3.common.util.UnstableApi
import androidx.media3.exoplayer.offline.Download
import androidx.media3.exoplayer.offline.DownloadManager
import androidx.media3.exoplayer.offline.DownloadRequest
import androidx.media3.exoplayer.offline.DownloadService
import androidx.recyclerview.widget.LinearLayoutManager
@ -23,30 +22,28 @@ import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R
import relax.offline.music.adapter.PlayListAdapter
import relax.offline.music.databinding.ActivityMoPlayDetailsBinding
import relax.offline.music.innertube.Innertube
import relax.offline.music.media.MediaControllerManager
import relax.offline.music.media.SongRadio
import relax.offline.music.service.MyDownloadService
import relax.offline.music.service.ViewModelMain
import relax.offline.music.sp.AppStore
import relax.offline.music.util.DownloadUtil
import relax.offline.music.util.LogTag.LogD
import relax.offline.music.util.PlayMode
import relax.offline.music.util.asMediaItem
import relax.offline.music.util.convertMillisToMinutesAndSecondsString
import melody.offline.music.R
import melody.offline.music.adapter.PlayListAdapter
import melody.offline.music.databinding.ActivityMoPlayDetailsBinding
import melody.offline.music.innertube.Innertube
import melody.offline.music.media.MediaControllerManager
import melody.offline.music.media.SongRadio
import melody.offline.music.service.MyDownloadService
import melody.offline.music.service.ViewModelMain
import melody.offline.music.sp.AppStore
import melody.offline.music.util.DownloadUtil
import melody.offline.music.util.LogTag.LogD
import melody.offline.music.util.PlayMode
import melody.offline.music.util.asMediaItem
import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import kotlinx.coroutines.selects.select
import org.json.JSONObject
import relax.offline.music.App
import relax.offline.music.bean.FavoriteBean
import relax.offline.music.util.AnalysisUtil
import relax.offline.music.util.LogTag
import melody.offline.music.App
import melody.offline.music.util.AnalysisUtil
@OptIn(UnstableApi::class)
class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {

View File

@ -1,15 +1,15 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.annotation.SuppressLint
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.adapter.SearchResultOtherAdapter
import relax.offline.music.databinding.ActivitySearchMoreBinding
import relax.offline.music.innertube.Innertube
import relax.offline.music.innertube.models.bodies.ContinuationBody
import relax.offline.music.innertube.models.bodies.SearchBody
import relax.offline.music.innertube.requests.moSearchPage
import melody.offline.music.adapter.SearchResultOtherAdapter
import melody.offline.music.databinding.ActivitySearchMoreBinding
import melody.offline.music.innertube.Innertube
import melody.offline.music.innertube.models.bodies.ContinuationBody
import melody.offline.music.innertube.models.bodies.SearchBody
import melody.offline.music.innertube.requests.moSearchPage
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select

View File

@ -1,14 +1,14 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.view.View
import com.bumptech.glide.Glide
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.databinding.ActivitySingerDetailsBinding
import relax.offline.music.innertube.Innertube
import relax.offline.music.innertube.requests.moSingerListPage
import relax.offline.music.util.LogTag.LogD
import relax.offline.music.view.SingerDetailsOtherView
import relax.offline.music.view.SingerDetailsSongView
import melody.offline.music.databinding.ActivitySingerDetailsBinding
import melody.offline.music.innertube.Innertube
import melody.offline.music.innertube.requests.moSingerListPage
import melody.offline.music.util.LogTag.LogD
import melody.offline.music.view.SingerDetailsOtherView
import melody.offline.music.view.SingerDetailsSongView
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select

View File

@ -1,17 +1,17 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.annotation.SuppressLint
import android.view.View
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.adapter.SingerMoreSongAdapter
import relax.offline.music.databinding.ActivitySearchMoreBinding
import relax.offline.music.innertube.Innertube
import relax.offline.music.innertube.models.bodies.BrowseBody
import relax.offline.music.innertube.models.bodies.ContinuationBody
import relax.offline.music.innertube.requests.moSingerDetailsMoreLoadMorePage
import relax.offline.music.innertube.requests.moSingerDetailsMorePage
import melody.offline.music.adapter.SingerMoreSongAdapter
import melody.offline.music.databinding.ActivitySearchMoreBinding
import melody.offline.music.innertube.Innertube
import melody.offline.music.innertube.models.bodies.BrowseBody
import melody.offline.music.innertube.models.bodies.ContinuationBody
import melody.offline.music.innertube.requests.moSingerDetailsMoreLoadMorePage
import melody.offline.music.innertube.requests.moSingerDetailsMorePage
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select

View File

@ -1,4 +1,4 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.animation.ValueAnimator
import android.annotation.SuppressLint
@ -21,14 +21,14 @@ import androidx.media3.common.util.UnstableApi
import com.bumptech.glide.Glide
import com.google.android.material.slider.Slider.OnChangeListener
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R
import relax.offline.music.bean.Audio
import relax.offline.music.databinding.ActivityPlayDetailsBinding
import relax.offline.music.media.LocalMediaControllerManager
import relax.offline.music.util.LogTag
import relax.offline.music.util.containsContent
import relax.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets
import melody.offline.music.R
import melody.offline.music.bean.Audio
import melody.offline.music.databinding.ActivityPlayDetailsBinding
import melody.offline.music.media.LocalMediaControllerManager
import melody.offline.music.util.LogTag
import melody.offline.music.util.containsContent
import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import melody.offline.music.util.getAudioDurationFromAssets
import java.io.IOException
import java.io.InputStream

View File

@ -1,17 +1,16 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.view.View
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import relax.offline.music.R
import relax.offline.music.databinding.ActivityPrimaryBinding
import relax.offline.music.fragment.MoHomeFragment
import relax.offline.music.fragment.MoMeFragment
import relax.offline.music.fragment.SearchFragment
import melody.offline.music.R
import melody.offline.music.databinding.ActivityPrimaryBinding
import melody.offline.music.fragment.MoHomeFragment
import melody.offline.music.fragment.MoMeFragment
import melody.offline.music.fragment.SearchFragment
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select
import relax.offline.music.util.AnalysisUtil
class PrimaryActivity : MoBaseActivity(), SearchFragment.SearchFragmentCancelClickListener {
/**

View File

@ -1,18 +1,18 @@
package relax.offline.music.activity
package melody.offline.music.activity
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R
import relax.offline.music.databinding.ActivitySettingsBinding
import relax.offline.music.fragment.MoMeFragment
import relax.offline.music.util.PRIVACY_POLICY_URL
import relax.offline.music.util.TERMS_OF_SERVICE_URL
import relax.offline.music.util.openPrivacyPolicy
import relax.offline.music.util.openTermsOfService
import relax.offline.music.util.sendFeedback
import relax.offline.music.util.shareApp
import melody.offline.music.R
import melody.offline.music.databinding.ActivitySettingsBinding
import melody.offline.music.fragment.MoMeFragment
import melody.offline.music.util.PRIVACY_POLICY_URL
import melody.offline.music.util.TERMS_OF_SERVICE_URL
import melody.offline.music.util.openPrivacyPolicy
import melody.offline.music.util.openTermsOfService
import melody.offline.music.util.sendFeedback
import melody.offline.music.util.shareApp
class SettingsActivity : AppCompatActivity() {

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.annotation.SuppressLint
import android.content.Context
@ -8,11 +8,11 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.R
import relax.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.databinding.DetailsListItemBinding
import relax.offline.music.innertube.Innertube
import relax.offline.music.media.MediaControllerManager
import melody.offline.music.R
import melody.offline.music.activity.MoPlayDetailsActivity
import melody.offline.music.databinding.DetailsListItemBinding
import melody.offline.music.innertube.Innertube
import melody.offline.music.media.MediaControllerManager
class DetailsListAdapter(
private val context: Context,

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.annotation.SuppressLint
import android.content.Context
@ -8,12 +8,12 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.R
import relax.offline.music.activity.MoLikedSongsActivity
import relax.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.bean.FavoriteBean
import relax.offline.music.databinding.LikedListItemBinding
import relax.offline.music.media.MediaControllerManager
import melody.offline.music.R
import melody.offline.music.activity.MoLikedSongsActivity
import melody.offline.music.activity.MoPlayDetailsActivity
import melody.offline.music.bean.FavoriteBean
import melody.offline.music.databinding.LikedListItemBinding
import melody.offline.music.media.MediaControllerManager
class LikedSongsAdapter(
private val context: Context,

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.annotation.SuppressLint
import android.content.Context
@ -8,12 +8,12 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.R
import relax.offline.music.activity.MoOfflineSongsActivity
import relax.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.bean.OfflineBean
import relax.offline.music.databinding.OfflineListItemBinding
import relax.offline.music.media.MediaControllerManager
import melody.offline.music.R
import melody.offline.music.activity.MoOfflineSongsActivity
import melody.offline.music.activity.MoPlayDetailsActivity
import melody.offline.music.bean.OfflineBean
import melody.offline.music.databinding.OfflineListItemBinding
import melody.offline.music.media.MediaControllerManager
class OfflineSongsAdapter(
private val context: Context,

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.content.Context
import android.content.Intent
@ -6,13 +6,13 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import relax.offline.music.R
import relax.offline.music.activity.PlayDetailsActivity
import relax.offline.music.bean.Audio
import relax.offline.music.databinding.ParentsVoiceLayoutBinding
import relax.offline.music.util.containsContent
import relax.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets
import melody.offline.music.R
import melody.offline.music.activity.PlayDetailsActivity
import melody.offline.music.bean.Audio
import melody.offline.music.databinding.ParentsVoiceLayoutBinding
import melody.offline.music.util.containsContent
import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import melody.offline.music.util.getAudioDurationFromAssets
class ParentsVoiceAdapter(
private val context: Context,
@ -52,8 +52,8 @@ class ParentsVoiceAdapter(
desc.text = convertMillisToMinutesAndSecondsString(s)
}
if (relax.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.currentPlayingAudio?.file == audio.file) {
if (melody.offline.music.App.currentPlayingAudio != null) {
if (melody.offline.music.App.currentPlayingAudio?.file == audio.file) {
playingLayout.visibility = View.VISIBLE
name.setTextColor(context.getColor(R.color.green))
desc.setTextColor(context.getColor(R.color.green))

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.annotation.SuppressLint
import android.content.Context
@ -9,9 +9,9 @@ import androidx.media3.common.C
import androidx.media3.common.MediaItem
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.R
import relax.offline.music.databinding.PlayListItemBinding
import relax.offline.music.media.MediaControllerManager
import melody.offline.music.R
import melody.offline.music.databinding.PlayListItemBinding
import melody.offline.music.media.MediaControllerManager
class PlayListAdapter(
private val context: Context,

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.content.Context
import android.content.Intent
@ -6,13 +6,13 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.R
import relax.offline.music.activity.PlayDetailsActivity
import relax.offline.music.bean.Audio
import relax.offline.music.databinding.RealHumanVoiceLayoutBinding
import relax.offline.music.util.AnalysisUtil
import relax.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets
import melody.offline.music.R
import melody.offline.music.activity.PlayDetailsActivity
import melody.offline.music.bean.Audio
import melody.offline.music.databinding.RealHumanVoiceLayoutBinding
import melody.offline.music.util.AnalysisUtil
import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import melody.offline.music.util.getAudioDurationFromAssets
class RealHumanVoiceAdapter(
private val context: Context,
@ -52,8 +52,8 @@ class RealHumanVoiceAdapter(
val s = getAudioDurationFromAssets(context, audio.file)
desc.text = convertMillisToMinutesAndSecondsString(s)
if (relax.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.currentPlayingAudio?.file == audio.file) {
if (melody.offline.music.App.currentPlayingAudio != null) {
if (melody.offline.music.App.currentPlayingAudio?.file == audio.file) {
name.setTextColor(context.getColor(R.color.green))
desc.setTextColor(context.getColor(R.color.green))
} else {

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.content.Context
import android.content.Intent
@ -7,12 +7,12 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.R
import relax.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.databinding.MusicResponsiveItemBinding
import relax.offline.music.innertube.models.MusicCarouselShelfRenderer
import relax.offline.music.media.MediaControllerManager
import relax.offline.music.util.AnalysisUtil
import melody.offline.music.R
import melody.offline.music.activity.MoPlayDetailsActivity
import melody.offline.music.databinding.MusicResponsiveItemBinding
import melody.offline.music.innertube.models.MusicCarouselShelfRenderer
import melody.offline.music.media.MediaControllerManager
import melody.offline.music.util.AnalysisUtil
class ResponsiveListAdapter(
private val context: Context,

View File

@ -1,10 +1,10 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import relax.offline.music.databinding.SearchHistoryAdapterItemBinding
import melody.offline.music.databinding.SearchHistoryAdapterItemBinding
class SearchHistoryAdapter(
private val context: Context,

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.annotation.SuppressLint
import android.content.Context
@ -7,12 +7,12 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.activity.MoListDetailsActivity
import relax.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.activity.MoSingerDetailsActivity
import relax.offline.music.databinding.SearchResultOtherItemBinding
import relax.offline.music.innertube.Innertube
import relax.offline.music.util.LogTag
import melody.offline.music.activity.MoListDetailsActivity
import melody.offline.music.activity.MoPlayDetailsActivity
import melody.offline.music.activity.MoSingerDetailsActivity
import melody.offline.music.databinding.SearchResultOtherItemBinding
import melody.offline.music.innertube.Innertube
import melody.offline.music.util.LogTag
class SearchResultOtherAdapter(
private val context: Context,

View File

@ -1,10 +1,10 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import relax.offline.music.databinding.SearchSuggestionsAdapterItemBinding
import melody.offline.music.databinding.SearchSuggestionsAdapterItemBinding
class SearchSuggestionsAdapter(
private val context: Context,

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.annotation.SuppressLint
import android.content.Context
@ -8,9 +8,9 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.databinding.DetailsListItemBinding
import relax.offline.music.innertube.models.MusicShelfRenderer
import melody.offline.music.activity.MoPlayDetailsActivity
import melody.offline.music.databinding.DetailsListItemBinding
import melody.offline.music.innertube.models.MusicShelfRenderer
class SingerDetailsSongListAdapter(
private val context: Context,

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.annotation.SuppressLint
import android.content.Context
@ -7,11 +7,11 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.activity.MoListDetailsActivity
import relax.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.databinding.MusicTowRowItemBinding
import relax.offline.music.databinding.SearchResultOtherItemBinding
import relax.offline.music.innertube.Innertube
import melody.offline.music.activity.MoListDetailsActivity
import melody.offline.music.activity.MoPlayDetailsActivity
import melody.offline.music.databinding.MusicTowRowItemBinding
import melody.offline.music.databinding.SearchResultOtherItemBinding
import melody.offline.music.innertube.Innertube
class SingerMoreSongAdapter(
private val context: Context,

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.content.Context
import android.content.Intent
@ -7,13 +7,13 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.R
import relax.offline.music.activity.PlayDetailsActivity
import relax.offline.music.bean.Audio
import relax.offline.music.databinding.SoundsOfAppliancesLayoutBinding
import relax.offline.music.util.AnalysisUtil
import relax.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets
import melody.offline.music.R
import melody.offline.music.activity.PlayDetailsActivity
import melody.offline.music.bean.Audio
import melody.offline.music.databinding.SoundsOfAppliancesLayoutBinding
import melody.offline.music.util.AnalysisUtil
import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import melody.offline.music.util.getAudioDurationFromAssets
class SoundsOfAppliancesAdapter(
private val context: Context,
@ -54,8 +54,8 @@ class SoundsOfAppliancesAdapter(
val s = getAudioDurationFromAssets(context, audio.file)
desc.text = convertMillisToMinutesAndSecondsString(s)
if (relax.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.currentPlayingAudio?.file == audio.file) {
if (melody.offline.music.App.currentPlayingAudio != null) {
if (melody.offline.music.App.currentPlayingAudio?.file == audio.file) {
playingLayout.visibility = View.VISIBLE
name.setTextColor(context.getColor(R.color.green))
desc.setTextColor(context.getColor(R.color.green))

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.content.Context
import android.content.Intent
@ -7,13 +7,13 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.R
import relax.offline.music.activity.PlayDetailsActivity
import relax.offline.music.bean.Audio
import relax.offline.music.databinding.SoundsOfNatureLayoutBinding
import relax.offline.music.util.AnalysisUtil
import relax.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets
import melody.offline.music.R
import melody.offline.music.activity.PlayDetailsActivity
import melody.offline.music.bean.Audio
import melody.offline.music.databinding.SoundsOfNatureLayoutBinding
import melody.offline.music.util.AnalysisUtil
import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import melody.offline.music.util.getAudioDurationFromAssets
class SoundsOfNatureAdapter(
private val context: Context,
@ -54,8 +54,8 @@ class SoundsOfNatureAdapter(
val s = getAudioDurationFromAssets(context, audio.file)
desc.text = convertMillisToMinutesAndSecondsString(s)
if (relax.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.currentPlayingAudio?.file == audio.file) {
if (melody.offline.music.App.currentPlayingAudio != null) {
if (melody.offline.music.App.currentPlayingAudio?.file == audio.file) {
playingLayout.visibility = View.VISIBLE
name.setTextColor(context.getColor(R.color.green))
desc.setTextColor(context.getColor(R.color.green))

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter
package melody.offline.music.adapter
import android.app.Activity
import android.content.Intent
@ -6,12 +6,12 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import relax.offline.music.activity.MoListDetailsActivity
import relax.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.activity.MoSingerDetailsActivity
import relax.offline.music.databinding.MusicTowRowItemBinding
import relax.offline.music.innertube.models.MusicCarouselShelfRenderer
import relax.offline.music.util.AnalysisUtil
import melody.offline.music.activity.MoListDetailsActivity
import melody.offline.music.activity.MoPlayDetailsActivity
import melody.offline.music.activity.MoSingerDetailsActivity
import melody.offline.music.databinding.MusicTowRowItemBinding
import melody.offline.music.innertube.models.MusicCarouselShelfRenderer
import melody.offline.music.util.AnalysisUtil
class TowRowListAdapter(
private val context: Activity,

View File

@ -1,4 +1,4 @@
package relax.offline.music.bean
package melody.offline.music.bean
import androidx.annotation.Keep
import androidx.room.ColumnInfo

View File

@ -1,4 +1,4 @@
package relax.offline.music.bean
package melody.offline.music.bean
import java.io.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.bean
package melody.offline.music.bean
import androidx.room.ColumnInfo
import androidx.room.Entity

View File

@ -1,4 +1,4 @@
package relax.offline.music.bean
package melody.offline.music.bean
import androidx.annotation.Keep
import androidx.room.ColumnInfo

View File

@ -1,4 +1,4 @@
package relax.offline.music.bean
package melody.offline.music.bean
import androidx.annotation.Keep
import androidx.room.ColumnInfo

View File

@ -1,4 +1,4 @@
package relax.offline.music.bean
package melody.offline.music.bean
import java.io.Serializable

View File

@ -1,9 +1,9 @@
package relax.offline.music.database
package melody.offline.music.database
import androidx.room.Database
import androidx.room.RoomDatabase
import relax.offline.music.bean.Audio
import melody.offline.music.bean.Audio
@Database(entities = [Audio::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {

View File

@ -1,11 +1,10 @@
package relax.offline.music.database
package melody.offline.music.database
import android.content.Context
import androidx.room.Room
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import relax.offline.music.bean.FavoriteBean
import relax.offline.music.util.LogTag
import melody.offline.music.bean.FavoriteBean
class AppFavoriteDBManager private constructor(context: Context) {

View File

@ -1,8 +1,8 @@
package relax.offline.music.database
package melody.offline.music.database
import androidx.room.Database
import androidx.room.RoomDatabase
import relax.offline.music.bean.FavoriteBean
import melody.offline.music.bean.FavoriteBean
@Database(entities = [FavoriteBean::class], version = 1, exportSchema = false)
abstract class AppFavoriteDatabase : RoomDatabase() {

View File

@ -1,9 +1,8 @@
package relax.offline.music.database
package melody.offline.music.database
import android.content.Context
import androidx.room.Room
import relax.offline.music.bean.OfflineBean
import relax.offline.music.util.LogTag
import melody.offline.music.bean.OfflineBean
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

View File

@ -1,9 +1,9 @@
package relax.offline.music.database
package melody.offline.music.database
import androidx.room.Database
import androidx.room.RoomDatabase
import relax.offline.music.bean.OfflineBean
import melody.offline.music.bean.OfflineBean
@Database(entities = [OfflineBean::class], version = 1, exportSchema = false)
abstract class AppOfflineDatabase : RoomDatabase() {

View File

@ -1,9 +1,9 @@
package relax.offline.music.database
package melody.offline.music.database
import androidx.room.Database
import androidx.room.RoomDatabase
import relax.offline.music.bean.CurrentPlayingAudio
import melody.offline.music.bean.CurrentPlayingAudio
@Database(entities = [CurrentPlayingAudio::class], version = 1, exportSchema = false)
abstract class CurrentAudioDatabase : RoomDatabase() {

View File

@ -1,8 +1,8 @@
package relax.offline.music.database
package melody.offline.music.database
import android.content.Context
import androidx.room.Room
import relax.offline.music.bean.CurrentPlayingAudio
import melody.offline.music.bean.CurrentPlayingAudio
class CurrentAudioManager private constructor(context: Context) {
private val database: CurrentAudioDatabase = Room.databaseBuilder(

View File

@ -1,4 +1,4 @@
package relax.offline.music.database
package melody.offline.music.database
import androidx.room.Dao
import androidx.room.Delete
@ -6,7 +6,7 @@ import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import relax.offline.music.bean.CurrentPlayingAudio
import melody.offline.music.bean.CurrentPlayingAudio
@Dao
interface CurrentPlayingAudioDao {

View File

@ -1,8 +1,8 @@
package relax.offline.music.database
package melody.offline.music.database
import android.content.Context
import androidx.room.Room
import relax.offline.music.bean.Audio
import melody.offline.music.bean.Audio
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

View File

@ -1,7 +1,7 @@
package relax.offline.music.database
package melody.offline.music.database
import androidx.room.*
import relax.offline.music.bean.FavoriteBean
import melody.offline.music.bean.FavoriteBean
@Dao
interface FavoriteDao {

View File

@ -1,9 +1,9 @@
package relax.offline.music.database
package melody.offline.music.database
import androidx.room.*
import relax.offline.music.bean.Audio
import melody.offline.music.bean.Audio
@Dao
interface LocalAudioDao {

View File

@ -1,7 +1,7 @@
package relax.offline.music.database
package melody.offline.music.database
import androidx.room.*
import relax.offline.music.bean.OfflineBean
import melody.offline.music.bean.OfflineBean
@Dao
interface OfflineDao {

View File

@ -1,11 +1,11 @@
package relax.offline.music.firebase
package melody.offline.music.firebase
object Constants {
const val KEY_SHOULD_ENTER_MUSIC_JSON = "key_should_enter_music_json"
const val DEFAULT_SHOULD_ENTER_MUSIC_JSON = """
{
"versionCode": 4,
"versionCode": 1,
"enter": false
}
"""

View File

@ -1,4 +1,4 @@
package relax.offline.music.firebase
package melody.offline.music.firebase
import android.annotation.SuppressLint
import android.app.Application
@ -12,10 +12,10 @@ 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 relax.offline.music.App
import relax.offline.music.BuildConfig
import relax.offline.music.sp.AppStore
import relax.offline.music.util.LogTag
import melody.offline.music.App
import melody.offline.music.BuildConfig
import melody.offline.music.sp.AppStore
import melody.offline.music.util.LogTag
import java.lang.ref.WeakReference
class RemoteConfig {

View File

@ -1,4 +1,4 @@
package relax.offline.music.fragment
package melody.offline.music.fragment
import android.annotation.SuppressLint
import android.os.Bundle
@ -9,12 +9,12 @@ import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.adapter.RealHumanVoiceAdapter
import relax.offline.music.adapter.SoundsOfAppliancesAdapter
import relax.offline.music.adapter.SoundsOfNatureAdapter
import relax.offline.music.databinding.FragmentHomeBinding
import relax.offline.music.util.AnalysisUtil
import relax.offline.music.util.GridSpacingItemDecoration
import melody.offline.music.adapter.RealHumanVoiceAdapter
import melody.offline.music.adapter.SoundsOfAppliancesAdapter
import melody.offline.music.adapter.SoundsOfNatureAdapter
import melody.offline.music.databinding.FragmentHomeBinding
import melody.offline.music.util.AnalysisUtil
import melody.offline.music.util.GridSpacingItemDecoration
class HomeFragment : Fragment() {
private lateinit var binding: FragmentHomeBinding
@ -43,28 +43,28 @@ class HomeFragment : Fragment() {
}
private fun initView() {
if (relax.offline.music.App.resourcesList.categories.isNotEmpty()) {
binding.soundsName.text = relax.offline.music.App.resourcesList.categories[1].name
binding.natureName.text = relax.offline.music.App.resourcesList.categories[2].name
if (melody.offline.music.App.resourcesList.categories.isNotEmpty()) {
binding.soundsName.text = melody.offline.music.App.resourcesList.categories[1].name
binding.natureName.text = melody.offline.music.App.resourcesList.categories[2].name
}
if (relax.offline.music.App.realHumanVoiceList.isNotEmpty()) {
realHumanVoiceAdapter = RealHumanVoiceAdapter(requireActivity(), relax.offline.music.App.realHumanVoiceList)
if (melody.offline.music.App.realHumanVoiceList.isNotEmpty()) {
realHumanVoiceAdapter = RealHumanVoiceAdapter(requireActivity(), melody.offline.music.App.realHumanVoiceList)
binding.realRv.layoutManager =
GridLayoutManager(requireActivity(), 2, GridLayoutManager.VERTICAL, false)
binding.realRv.addItemDecoration(GridSpacingItemDecoration(requireActivity(), 20, 2))
binding.realRv.adapter = realHumanVoiceAdapter
}
if (relax.offline.music.App.soundsOfAppliancesList.isNotEmpty()) {
if (melody.offline.music.App.soundsOfAppliancesList.isNotEmpty()) {
soundsOfAppliancesAdapter =
SoundsOfAppliancesAdapter(requireActivity(), relax.offline.music.App.soundsOfAppliancesList)
SoundsOfAppliancesAdapter(requireActivity(), melody.offline.music.App.soundsOfAppliancesList)
binding.soundsRv.layoutManager =
GridLayoutManager(requireActivity(), 2, GridLayoutManager.VERTICAL, false)
binding.soundsRv.addItemDecoration(GridSpacingItemDecoration(requireActivity(), 20, 2))
binding.soundsRv.adapter = soundsOfAppliancesAdapter
}
if (relax.offline.music.App.soundsOfNatureList.isNotEmpty()) {
if (melody.offline.music.App.soundsOfNatureList.isNotEmpty()) {
soundsOfNatureAdapter =
SoundsOfNatureAdapter(requireActivity(), relax.offline.music.App.soundsOfNatureList)
SoundsOfNatureAdapter(requireActivity(), melody.offline.music.App.soundsOfNatureList)
binding.natureRv.layoutManager =
LinearLayoutManager(requireActivity(), LinearLayoutManager.VERTICAL, false)
binding.natureRv.adapter = soundsOfNatureAdapter
@ -74,26 +74,26 @@ class HomeFragment : Fragment() {
@SuppressLint("NotifyDataSetChanged")
override fun onResume() {
super.onResume()
if (relax.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.realHumanVoiceList.isNotEmpty()) {
for ((index, audio) in relax.offline.music.App.realHumanVoiceList.withIndex()) {
if (audio.file == relax.offline.music.App.currentPlayingAudio?.file) {
if (melody.offline.music.App.currentPlayingAudio != null) {
if (melody.offline.music.App.realHumanVoiceList.isNotEmpty()) {
for ((index, audio) in melody.offline.music.App.realHumanVoiceList.withIndex()) {
if (audio.file == melody.offline.music.App.currentPlayingAudio?.file) {
notifyDataSetChanged()
break
}
}
}
if (relax.offline.music.App.soundsOfAppliancesList.isNotEmpty()) {
for ((index, audio) in relax.offline.music.App.soundsOfAppliancesList.withIndex()) {
if (audio.file == relax.offline.music.App.currentPlayingAudio?.file) {
if (melody.offline.music.App.soundsOfAppliancesList.isNotEmpty()) {
for ((index, audio) in melody.offline.music.App.soundsOfAppliancesList.withIndex()) {
if (audio.file == melody.offline.music.App.currentPlayingAudio?.file) {
notifyDataSetChanged()
break
}
}
}
if (relax.offline.music.App.soundsOfNatureList.isNotEmpty()) {
for ((index, audio) in relax.offline.music.App.soundsOfNatureList.withIndex()) {
if (audio.file == relax.offline.music.App.currentPlayingAudio?.file) {
if (melody.offline.music.App.soundsOfNatureList.isNotEmpty()) {
for ((index, audio) in melody.offline.music.App.soundsOfNatureList.withIndex()) {
if (audio.file == melody.offline.music.App.currentPlayingAudio?.file) {
notifyDataSetChanged()
break
}

View File

@ -1,4 +1,4 @@
package relax.offline.music.fragment
package melody.offline.music.fragment
import android.Manifest
import android.annotation.SuppressLint
@ -21,11 +21,11 @@ import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R
import relax.offline.music.activity.SettingsActivity
import relax.offline.music.adapter.ParentsVoiceAdapter
import relax.offline.music.bean.Audio
import relax.offline.music.databinding.FragmentImportBinding
import melody.offline.music.R
import melody.offline.music.activity.SettingsActivity
import melody.offline.music.adapter.ParentsVoiceAdapter
import melody.offline.music.bean.Audio
import melody.offline.music.databinding.FragmentImportBinding
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@ -59,7 +59,7 @@ class ImportFragment : Fragment() {
checkAndRequestPermissions()
}
importAdapterList.clear()
importAdapterList.addAll(relax.offline.music.App.importList)
importAdapterList.addAll(melody.offline.music.App.importList)
parentsVoiceAdapter = ParentsVoiceAdapter(requireActivity(), importAdapterList)
binding.importRv.layoutManager =
LinearLayoutManager(requireActivity(), LinearLayoutManager.VERTICAL, false)
@ -105,12 +105,12 @@ class ImportFragment : Fragment() {
binding.noContentLayout.visibility = View.VISIBLE
}
if (relax.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.importList.isNotEmpty()) {
if (melody.offline.music.App.currentPlayingAudio != null) {
if (melody.offline.music.App.importList.isNotEmpty()) {
importAdapterList.clear()
importAdapterList.addAll(relax.offline.music.App.importList)
importAdapterList.addAll(melody.offline.music.App.importList)
for ((index, audio) in importAdapterList.withIndex()) {
if (audio.file == relax.offline.music.App.currentPlayingAudio?.file) {
if (audio.file == melody.offline.music.App.currentPlayingAudio?.file) {
parentsVoiceAdapter?.notifyDataSetChanged()
break
}
@ -192,12 +192,12 @@ class ImportFragment : Fragment() {
CoroutineScope(Dispatchers.IO).launch {
if (audio.duration > 0) {
relax.offline.music.App.databaseManager.insertAudioFile(audio)
melody.offline.music.App.databaseManager.insertAudioFile(audio)
}
withContext(Dispatchers.Main) {
relax.offline.music.App.initImportAudio {
melody.offline.music.App.initImportAudio {
importAdapterList.clear()
importAdapterList.addAll(relax.offline.music.App.importList)
importAdapterList.addAll(melody.offline.music.App.importList)
parentsVoiceAdapter?.notifyDataSetChanged()
if (importAdapterList.isNotEmpty()) {
binding.noContentLayout.visibility = View.GONE

View File

@ -1,4 +1,4 @@
package relax.offline.music.fragment
package melody.offline.music.fragment
import android.os.Bundle
import android.view.LayoutInflater
@ -8,8 +8,8 @@ import androidx.annotation.OptIn
import androidx.fragment.app.Fragment
import androidx.media3.common.util.UnstableApi
import androidx.viewbinding.ViewBinding
import relax.offline.music.sp.AppStore
import relax.offline.music.util.LogTag
import melody.offline.music.sp.AppStore
import melody.offline.music.util.LogTag
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.cancel

View File

@ -1,21 +1,21 @@
package relax.offline.music.fragment
package melody.offline.music.fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.databinding.FragmentMoHomeBinding
import relax.offline.music.innertube.Innertube
import relax.offline.music.innertube.models.MusicCarouselShelfRenderer
import relax.offline.music.innertube.requests.homePage
import relax.offline.music.innertube.requests.homePageMore
import relax.offline.music.util.LogTag.LogD
import relax.offline.music.view.MusicResponsiveListView
import relax.offline.music.view.MusicTowRowListView
import melody.offline.music.databinding.FragmentMoHomeBinding
import melody.offline.music.innertube.Innertube
import melody.offline.music.innertube.models.MusicCarouselShelfRenderer
import melody.offline.music.innertube.requests.homePage
import melody.offline.music.innertube.requests.homePageMore
import melody.offline.music.util.LogTag.LogD
import melody.offline.music.view.MusicResponsiveListView
import melody.offline.music.view.MusicTowRowListView
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select
import relax.offline.music.util.AnalysisUtil
import melody.offline.music.util.AnalysisUtil
class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() {

View File

@ -1,4 +1,4 @@
package relax.offline.music.fragment
package melody.offline.music.fragment
import android.content.Intent
import android.view.LayoutInflater
@ -8,13 +8,13 @@ import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select
import relax.offline.music.App
import relax.offline.music.R
import relax.offline.music.activity.MoLikedSongsActivity
import relax.offline.music.activity.MoOfflineSongsActivity
import relax.offline.music.activity.SettingsActivity
import relax.offline.music.databinding.FragmentMoMeBinding
import relax.offline.music.util.AnalysisUtil
import melody.offline.music.App
import melody.offline.music.R
import melody.offline.music.activity.MoLikedSongsActivity
import melody.offline.music.activity.MoOfflineSongsActivity
import melody.offline.music.activity.SettingsActivity
import melody.offline.music.databinding.FragmentMoMeBinding
import melody.offline.music.util.AnalysisUtil
class MoMeFragment : MoBaseFragment<FragmentMoMeBinding>() {

View File

@ -1,4 +1,4 @@
package relax.offline.music.fragment
package melody.offline.music.fragment
import android.annotation.SuppressLint
import android.content.Context
@ -20,22 +20,22 @@ import com.google.android.flexbox.FlexWrap
import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent
import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.adapter.SearchHistoryAdapter
import relax.offline.music.adapter.SearchSuggestionsAdapter
import relax.offline.music.databinding.FragmentSearchBinding
import relax.offline.music.innertube.Innertube
import relax.offline.music.innertube.models.bodies.SearchBody
import relax.offline.music.innertube.models.bodies.SearchSuggestionsBody
import relax.offline.music.innertube.requests.moSearchPage
import relax.offline.music.innertube.requests.searchSuggestions
import relax.offline.music.util.LogTag
import relax.offline.music.view.SearchResultOptimalView
import relax.offline.music.view.SearchResultOtherView
import melody.offline.music.adapter.SearchHistoryAdapter
import melody.offline.music.adapter.SearchSuggestionsAdapter
import melody.offline.music.databinding.FragmentSearchBinding
import melody.offline.music.innertube.Innertube
import melody.offline.music.innertube.models.bodies.SearchBody
import melody.offline.music.innertube.models.bodies.SearchSuggestionsBody
import melody.offline.music.innertube.requests.moSearchPage
import melody.offline.music.innertube.requests.searchSuggestions
import melody.offline.music.util.LogTag
import melody.offline.music.view.SearchResultOptimalView
import melody.offline.music.view.SearchResultOtherView
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select
import org.json.JSONObject
import relax.offline.music.util.AnalysisUtil
import melody.offline.music.util.AnalysisUtil
class SearchFragment : MoBaseFragment<FragmentSearchBinding>(), TextWatcher,
View.OnFocusChangeListener, SearchSuggestionsAdapter.OnItemClickListener,

View File

@ -1,4 +1,4 @@
package relax.offline.music.http
package melody.offline.music.http
import android.content.Context
import android.content.pm.PackageInfo
@ -7,8 +7,8 @@ import android.media.MediaDrm
import android.os.Build
import android.telephony.TelephonyManager
import android.text.TextUtils
import relax.offline.music.App
import relax.offline.music.sp.AppStore
import melody.offline.music.App
import melody.offline.music.sp.AppStore
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import java.util.UUID

View File

@ -1,11 +1,11 @@
package relax.offline.music.http
package melody.offline.music.http
import android.content.Context
import com.google.gson.Gson
import org.json.JSONException
import org.json.JSONObject
import relax.offline.music.App
import relax.offline.music.util.AesEncryptUtil
import melody.offline.music.App
import melody.offline.music.util.AesEncryptUtil
import java.util.Locale
import java.util.UUID

View File

@ -1,13 +1,13 @@
package relax.offline.music.http
package melody.offline.music.http
import okhttp3.Call
import okhttp3.Callback
import okhttp3.Response
import org.json.JSONObject
import relax.offline.music.App
import relax.offline.music.sp.AppStore
import relax.offline.music.util.AesEncryptUtil
import relax.offline.music.util.LogTag
import melody.offline.music.App
import melody.offline.music.sp.AppStore
import melody.offline.music.util.AesEncryptUtil
import melody.offline.music.util.LogTag
import java.io.IOException
class CommonIpInfoUtil {

View File

@ -1,4 +1,4 @@
package relax.offline.music.http
package melody.offline.music.http
import java.io.IOException

View File

@ -1,4 +1,4 @@
package relax.offline.music.http
package melody.offline.music.http
import android.content.Context
import android.net.ConnectivityManager

View File

@ -1,4 +1,4 @@
package relax.offline.music.http
package melody.offline.music.http
import java.io.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.http
package melody.offline.music.http
import java.io.Serializable

View File

@ -1,11 +1,11 @@
package relax.offline.music.http
package melody.offline.music.http
import android.content.Context
import okhttp3.Call
import okhttp3.Response
import org.json.JSONObject
import relax.offline.music.sp.AppStore
import relax.offline.music.util.LogTag
import melody.offline.music.sp.AppStore
import melody.offline.music.util.LogTag
import java.io.IOException
class UploadEventName {

View File

@ -1,12 +1,12 @@
package relax.offline.music.innertube
package melody.offline.music.innertube
import relax.offline.music.innertube.models.MusicCarouselShelfRenderer
import relax.offline.music.innertube.models.MusicShelfRenderer
import relax.offline.music.innertube.models.NavigationEndpoint
import relax.offline.music.innertube.models.Runs
import relax.offline.music.innertube.models.Thumbnail
import relax.offline.music.innertube.utils.brotli
import relax.offline.music.util.LogTag
import melody.offline.music.innertube.models.MusicCarouselShelfRenderer
import melody.offline.music.innertube.models.MusicShelfRenderer
import melody.offline.music.innertube.models.NavigationEndpoint
import melody.offline.music.innertube.models.Runs
import melody.offline.music.innertube.models.Thumbnail
import melody.offline.music.innertube.utils.brotli
import melody.offline.music.util.LogTag
import io.ktor.client.HttpClient
import io.ktor.client.engine.okhttp.OkHttp
import io.ktor.client.plugins.BrowserUserAgent

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable
import java.util.Locale

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable
@ -19,7 +19,7 @@ data class MusicCardShelfRenderer(
) {
@Serializable
data class Thumbnail(
val thumbnails: List<relax.offline.music.innertube.models.Thumbnail>?
val thumbnails: List<melody.offline.music.innertube.models.Thumbnail>?
)
}
}

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package relax.offline.music.innertube.models
package melody.offline.music.innertube.models
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
@ -16,7 +16,7 @@ data class ThumbnailRenderer(
) {
@Serializable
data class Thumbnail(
val thumbnails: List<relax.offline.music.innertube.models.Thumbnail>?
val thumbnails: List<melody.offline.music.innertube.models.Thumbnail>?
)
}
}

View File

@ -1,6 +1,6 @@
package relax.offline.music.innertube.models.bodies
package melody.offline.music.innertube.models.bodies
import relax.offline.music.innertube.models.Context
import melody.offline.music.innertube.models.Context
import kotlinx.serialization.Serializable
@Serializable

View File

@ -1,6 +1,6 @@
package relax.offline.music.innertube.models.bodies
package melody.offline.music.innertube.models.bodies
import relax.offline.music.innertube.models.Context
import melody.offline.music.innertube.models.Context
import kotlinx.serialization.Serializable
@Serializable

View File

@ -1,6 +1,6 @@
package relax.offline.music.innertube.models.bodies
package melody.offline.music.innertube.models.bodies
import relax.offline.music.innertube.models.Context
import melody.offline.music.innertube.models.Context
import kotlinx.serialization.Serializable
@Serializable

View File

@ -1,6 +1,6 @@
package relax.offline.music.innertube.models.bodies
package melody.offline.music.innertube.models.bodies
import relax.offline.music.innertube.models.Context
import melody.offline.music.innertube.models.Context
import kotlinx.serialization.Serializable
@Serializable

View File

@ -1,6 +1,6 @@
package relax.offline.music.innertube.models.bodies
package melody.offline.music.innertube.models.bodies
import relax.offline.music.innertube.models.Context
import melody.offline.music.innertube.models.Context
import kotlinx.serialization.Serializable
@Serializable

View File

@ -1,6 +1,6 @@
package relax.offline.music.innertube.models.bodies
package melody.offline.music.innertube.models.bodies
import relax.offline.music.innertube.models.Context
import melody.offline.music.innertube.models.Context
import kotlinx.serialization.Serializable
@Serializable

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