更改包名应用名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 { android {
namespace = "relax.offline.music" namespace = "melody.offline.music"
compileSdk = 34 compileSdk = 34
defaultConfig { defaultConfig {
applicationId = "relax.offline.mp3.music" applicationId = "com.hi.melody.music.noise"
minSdk = 24 minSdk = 24
targetSdk = 34 targetSdk = 34
versionCode = 4 versionCode = 1
versionName = "1.0.4" versionName = "1.0.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
setProperty("archivesBaseName", "Musiclax_${defaultConfig.versionName}(${defaultConfig.versionCode})") setProperty("archivesBaseName", "HiMelody_${defaultConfig.versionName}(${defaultConfig.versionCode})")
} }
buildTypes { buildTypes {

View File

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

View File

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

View File

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

View File

@ -1,30 +1,30 @@
package relax.offline.music package melody.offline.music
import android.app.Application import android.app.Application
import android.content.Context import android.content.Context
import androidx.annotation.OptIn import androidx.annotation.OptIn
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
import relax.offline.music.bean.Audio import melody.offline.music.bean.Audio
import relax.offline.music.bean.CurrentPlayingAudio import melody.offline.music.bean.CurrentPlayingAudio
import relax.offline.music.bean.ResourcesList import melody.offline.music.bean.ResourcesList
import relax.offline.music.database.AppOfflineDBManager import melody.offline.music.database.AppOfflineDBManager
import relax.offline.music.database.CurrentAudioManager import melody.offline.music.database.CurrentAudioManager
import relax.offline.music.database.DatabaseManager import melody.offline.music.database.DatabaseManager
import relax.offline.music.media.LocalMediaControllerManager import melody.offline.music.media.LocalMediaControllerManager
import relax.offline.music.media.MediaControllerManager import melody.offline.music.media.MediaControllerManager
import relax.offline.music.util.CacheManager import melody.offline.music.util.CacheManager
import relax.offline.music.util.DownloadUtil import melody.offline.music.util.DownloadUtil
import relax.offline.music.util.parseResources import melody.offline.music.util.parseResources
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import relax.offline.music.database.AppFavoriteDBManager import melody.offline.music.database.AppFavoriteDBManager
import relax.offline.music.firebase.RemoteConfig import melody.offline.music.firebase.RemoteConfig
import relax.offline.music.http.CommonIpInfoUtil import melody.offline.music.http.CommonIpInfoUtil
import relax.offline.music.http.UploadEventName import melody.offline.music.http.UploadEventName
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
import relax.offline.music.util.AppLifecycleHandler import melody.offline.music.util.AppLifecycleHandler
import java.io.BufferedReader import java.io.BufferedReader
import java.io.InputStreamReader import java.io.InputStreamReader
import java.util.concurrent.atomic.AtomicBoolean 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 android.os.Bundle
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.databinding.ActivityAboutBinding import melody.offline.music.databinding.ActivityAboutBinding
import relax.offline.music.util.getAppVersion import melody.offline.music.util.getAppVersion
class AboutActivity : BaseActivity() { class AboutActivity : BaseActivity() {

View File

@ -1,4 +1,4 @@
package relax.offline.music.activity package melody.offline.music.activity
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity 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.content.Intent
import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.databinding.ActivityLaunchBinding import melody.offline.music.databinding.ActivityLaunchBinding
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
class LaunchActivity : MoBaseActivity() { class LaunchActivity : MoBaseActivity() {
private lateinit var binding: ActivityLaunchBinding private lateinit var binding: ActivityLaunchBinding
private val totalTime = 5000L // 5秒 private val totalTime = 8000L // 5秒
private val interval = 50L // 更新间隔,毫秒 private val interval = 50L // 更新间隔,毫秒
private val steps = totalTime / interval private val steps = totalTime / interval
private val progressPerStep = 100f / steps.toFloat() 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.content.Intent
import android.os.Bundle import android.os.Bundle
@ -12,14 +12,13 @@ import androidx.fragment.app.FragmentTransaction
import androidx.media3.common.Player import androidx.media3.common.Player
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.bean.Audio import melody.offline.music.bean.Audio
import relax.offline.music.databinding.ActivityMainBinding import melody.offline.music.databinding.ActivityMainBinding
import relax.offline.music.fragment.HomeFragment import melody.offline.music.fragment.HomeFragment
import relax.offline.music.fragment.ImportFragment import melody.offline.music.fragment.ImportFragment
import relax.offline.music.media.LocalMediaControllerManager import melody.offline.music.media.LocalMediaControllerManager
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.getAudioDurationFromAssets
import relax.offline.music.util.getAudioDurationFromAssets
class MainActivity : BaseActivity() { class MainActivity : BaseActivity() {
@ -52,11 +51,11 @@ class MainActivity : BaseActivity() {
super.onResume() super.onResume()
val currentPlayer = LocalMediaControllerManager.getController() val currentPlayer = LocalMediaControllerManager.getController()
if (relax.offline.music.App.currentPlayingAudio == null) { if (melody.offline.music.App.currentPlayingAudio == null) {
binding.playingStatusLayout.visibility = View.GONE binding.playingStatusLayout.visibility = View.GONE
} else { } else {
binding.playingStatusLayout.visibility = View.VISIBLE binding.playingStatusLayout.visibility = View.VISIBLE
val currentAudio = relax.offline.music.App.currentPlayingAudio val currentAudio = melody.offline.music.App.currentPlayingAudio
val maxProgress = try { val maxProgress = try {
getAudioDurationFromAssets(this, currentAudio?.file!!) getAudioDurationFromAssets(this, currentAudio?.file!!)
@ -97,7 +96,7 @@ class MainActivity : BaseActivity() {
updateBtnState(1) updateBtnState(1)
} }
binding.playingStatusLayout.setOnClickListener { binding.playingStatusLayout.setOnClickListener {
val currentAudio = relax.offline.music.App.currentPlayingAudio val currentAudio = melody.offline.music.App.currentPlayingAudio
val duration = try { val duration = try {
getAudioDurationFromAssets( getAudioDurationFromAssets(
this, currentAudio?.file!! this, currentAudio?.file!!
@ -131,7 +130,7 @@ class MainActivity : BaseActivity() {
} }
updateProgressState() updateProgressState()
} else { } else {
LocalMediaControllerManager.setupMedia(this@MainActivity, relax.offline.music.App.currentPlayingAudio!!, LocalMediaControllerManager.setupMedia(this@MainActivity, melody.offline.music.App.currentPlayingAudio!!,
object : Player.Listener { object : Player.Listener {
override fun onPlayWhenReadyChanged( override fun onPlayWhenReadyChanged(
playWhenReady: Boolean, playWhenReady: Boolean,

View File

@ -1,4 +1,4 @@
package relax.offline.music.activity package melody.offline.music.activity
import android.content.Context import android.content.Context
import android.graphics.Bitmap import android.graphics.Bitmap
@ -28,16 +28,16 @@ import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.json.JSONObject import org.json.JSONObject
import relax.offline.music.App import melody.offline.music.App
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.bean.FavoriteBean import melody.offline.music.bean.FavoriteBean
import relax.offline.music.bean.OfflineBean import melody.offline.music.bean.OfflineBean
import relax.offline.music.http.getAppVersionCode import melody.offline.music.http.getAppVersionCode
import relax.offline.music.media.MediaControllerManager import melody.offline.music.media.MediaControllerManager
import relax.offline.music.sp.AppStore import melody.offline.music.sp.AppStore
import relax.offline.music.util.LogTag import melody.offline.music.util.LogTag
import relax.offline.music.http.getCountryCode import melody.offline.music.http.getCountryCode
import relax.offline.music.view.MusicPlayerView import melody.offline.music.view.MusicPlayerView
@OptIn(UnstableApi::class) @OptIn(UnstableApi::class)
abstract class MoBaseActivity : AppCompatActivity(), CoroutineScope by MainScope(), 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.annotation.SuppressLint
import android.view.View import android.view.View
@ -7,10 +7,10 @@ import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select import kotlinx.coroutines.selects.select
import relax.offline.music.App import melody.offline.music.App
import relax.offline.music.adapter.LikedSongsAdapter import melody.offline.music.adapter.LikedSongsAdapter
import relax.offline.music.bean.FavoriteBean import melody.offline.music.bean.FavoriteBean
import relax.offline.music.databinding.ActivityLikedSongsBinding import melody.offline.music.databinding.ActivityLikedSongsBinding
class MoLikedSongsActivity : MoBaseActivity(), LikedSongsAdapter.OnItemFavoritesClickListener { 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.annotation.SuppressLint
import android.view.View import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.adapter.DetailsListAdapter import melody.offline.music.adapter.DetailsListAdapter
import relax.offline.music.databinding.ActivityDetailsBinding import melody.offline.music.databinding.ActivityDetailsBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
import relax.offline.music.innertube.requests.moPlaylistPage import melody.offline.music.innertube.requests.moPlaylistPage
import relax.offline.music.util.LogTag.LogD import melody.offline.music.util.LogTag.LogD
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select 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.annotation.SuppressLint
import android.view.View import android.view.View
@ -7,11 +7,10 @@ import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select import kotlinx.coroutines.selects.select
import relax.offline.music.App import melody.offline.music.App
import relax.offline.music.adapter.OfflineSongsAdapter import melody.offline.music.adapter.OfflineSongsAdapter
import relax.offline.music.bean.OfflineBean import melody.offline.music.bean.OfflineBean
import relax.offline.music.databinding.ActivityOfflineSongsBinding import melody.offline.music.databinding.ActivityOfflineSongsBinding
import relax.offline.music.util.LogTag.LogD
class MoOfflineSongsActivity : MoBaseActivity() { class MoOfflineSongsActivity : MoBaseActivity() {
private val requests: Channel<Request> = Channel(Channel.UNLIMITED) 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.annotation.SuppressLint
import android.graphics.Bitmap import android.graphics.Bitmap
@ -15,7 +15,6 @@ import androidx.media3.common.PlaybackException
import androidx.media3.common.Player import androidx.media3.common.Player
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
import androidx.media3.exoplayer.offline.Download import androidx.media3.exoplayer.offline.Download
import androidx.media3.exoplayer.offline.DownloadManager
import androidx.media3.exoplayer.offline.DownloadRequest import androidx.media3.exoplayer.offline.DownloadRequest
import androidx.media3.exoplayer.offline.DownloadService import androidx.media3.exoplayer.offline.DownloadService
import androidx.recyclerview.widget.LinearLayoutManager 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.target.CustomTarget
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.adapter.PlayListAdapter import melody.offline.music.adapter.PlayListAdapter
import relax.offline.music.databinding.ActivityMoPlayDetailsBinding import melody.offline.music.databinding.ActivityMoPlayDetailsBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
import relax.offline.music.media.MediaControllerManager import melody.offline.music.media.MediaControllerManager
import relax.offline.music.media.SongRadio import melody.offline.music.media.SongRadio
import relax.offline.music.service.MyDownloadService import melody.offline.music.service.MyDownloadService
import relax.offline.music.service.ViewModelMain import melody.offline.music.service.ViewModelMain
import relax.offline.music.sp.AppStore import melody.offline.music.sp.AppStore
import relax.offline.music.util.DownloadUtil import melody.offline.music.util.DownloadUtil
import relax.offline.music.util.LogTag.LogD import melody.offline.music.util.LogTag.LogD
import relax.offline.music.util.PlayMode import melody.offline.music.util.PlayMode
import relax.offline.music.util.asMediaItem import melody.offline.music.util.asMediaItem
import relax.offline.music.util.convertMillisToMinutesAndSecondsString import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.selects.select import kotlinx.coroutines.selects.select
import org.json.JSONObject import org.json.JSONObject
import relax.offline.music.App import melody.offline.music.App
import relax.offline.music.bean.FavoriteBean import melody.offline.music.util.AnalysisUtil
import relax.offline.music.util.AnalysisUtil
import relax.offline.music.util.LogTag
@OptIn(UnstableApi::class) @OptIn(UnstableApi::class)
class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener { 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.annotation.SuppressLint
import android.view.View import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.adapter.SearchResultOtherAdapter import melody.offline.music.adapter.SearchResultOtherAdapter
import relax.offline.music.databinding.ActivitySearchMoreBinding import melody.offline.music.databinding.ActivitySearchMoreBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
import relax.offline.music.innertube.models.bodies.ContinuationBody import melody.offline.music.innertube.models.bodies.ContinuationBody
import relax.offline.music.innertube.models.bodies.SearchBody import melody.offline.music.innertube.models.bodies.SearchBody
import relax.offline.music.innertube.requests.moSearchPage import melody.offline.music.innertube.requests.moSearchPage
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select 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 android.view.View
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.databinding.ActivitySingerDetailsBinding import melody.offline.music.databinding.ActivitySingerDetailsBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
import relax.offline.music.innertube.requests.moSingerListPage import melody.offline.music.innertube.requests.moSingerListPage
import relax.offline.music.util.LogTag.LogD import melody.offline.music.util.LogTag.LogD
import relax.offline.music.view.SingerDetailsOtherView import melody.offline.music.view.SingerDetailsOtherView
import relax.offline.music.view.SingerDetailsSongView import melody.offline.music.view.SingerDetailsSongView
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select 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.annotation.SuppressLint
import android.view.View import android.view.View
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.adapter.SingerMoreSongAdapter import melody.offline.music.adapter.SingerMoreSongAdapter
import relax.offline.music.databinding.ActivitySearchMoreBinding import melody.offline.music.databinding.ActivitySearchMoreBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
import relax.offline.music.innertube.models.bodies.BrowseBody import melody.offline.music.innertube.models.bodies.BrowseBody
import relax.offline.music.innertube.models.bodies.ContinuationBody import melody.offline.music.innertube.models.bodies.ContinuationBody
import relax.offline.music.innertube.requests.moSingerDetailsMoreLoadMorePage import melody.offline.music.innertube.requests.moSingerDetailsMoreLoadMorePage
import relax.offline.music.innertube.requests.moSingerDetailsMorePage import melody.offline.music.innertube.requests.moSingerDetailsMorePage
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select 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.animation.ValueAnimator
import android.annotation.SuppressLint import android.annotation.SuppressLint
@ -21,14 +21,14 @@ import androidx.media3.common.util.UnstableApi
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.google.android.material.slider.Slider.OnChangeListener import com.google.android.material.slider.Slider.OnChangeListener
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.bean.Audio import melody.offline.music.bean.Audio
import relax.offline.music.databinding.ActivityPlayDetailsBinding import melody.offline.music.databinding.ActivityPlayDetailsBinding
import relax.offline.music.media.LocalMediaControllerManager import melody.offline.music.media.LocalMediaControllerManager
import relax.offline.music.util.LogTag import melody.offline.music.util.LogTag
import relax.offline.music.util.containsContent import melody.offline.music.util.containsContent
import relax.offline.music.util.convertMillisToMinutesAndSecondsString import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets import melody.offline.music.util.getAudioDurationFromAssets
import java.io.IOException import java.io.IOException
import java.io.InputStream 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.view.View
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.databinding.ActivityPrimaryBinding import melody.offline.music.databinding.ActivityPrimaryBinding
import relax.offline.music.fragment.MoHomeFragment import melody.offline.music.fragment.MoHomeFragment
import relax.offline.music.fragment.MoMeFragment import melody.offline.music.fragment.MoMeFragment
import relax.offline.music.fragment.SearchFragment import melody.offline.music.fragment.SearchFragment
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select import kotlinx.coroutines.selects.select
import relax.offline.music.util.AnalysisUtil
class PrimaryActivity : MoBaseActivity(), SearchFragment.SearchFragmentCancelClickListener { 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.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.databinding.ActivitySettingsBinding import melody.offline.music.databinding.ActivitySettingsBinding
import relax.offline.music.fragment.MoMeFragment import melody.offline.music.fragment.MoMeFragment
import relax.offline.music.util.PRIVACY_POLICY_URL import melody.offline.music.util.PRIVACY_POLICY_URL
import relax.offline.music.util.TERMS_OF_SERVICE_URL import melody.offline.music.util.TERMS_OF_SERVICE_URL
import relax.offline.music.util.openPrivacyPolicy import melody.offline.music.util.openPrivacyPolicy
import relax.offline.music.util.openTermsOfService import melody.offline.music.util.openTermsOfService
import relax.offline.music.util.sendFeedback import melody.offline.music.util.sendFeedback
import relax.offline.music.util.shareApp import melody.offline.music.util.shareApp
class SettingsActivity : AppCompatActivity() { 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.annotation.SuppressLint
import android.content.Context import android.content.Context
@ -8,11 +8,11 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.MoPlayDetailsActivity import melody.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.databinding.DetailsListItemBinding import melody.offline.music.databinding.DetailsListItemBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
import relax.offline.music.media.MediaControllerManager import melody.offline.music.media.MediaControllerManager
class DetailsListAdapter( class DetailsListAdapter(
private val context: Context, 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.annotation.SuppressLint
import android.content.Context import android.content.Context
@ -8,12 +8,12 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.MoLikedSongsActivity import melody.offline.music.activity.MoLikedSongsActivity
import relax.offline.music.activity.MoPlayDetailsActivity import melody.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.bean.FavoriteBean import melody.offline.music.bean.FavoriteBean
import relax.offline.music.databinding.LikedListItemBinding import melody.offline.music.databinding.LikedListItemBinding
import relax.offline.music.media.MediaControllerManager import melody.offline.music.media.MediaControllerManager
class LikedSongsAdapter( class LikedSongsAdapter(
private val context: Context, 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.annotation.SuppressLint
import android.content.Context import android.content.Context
@ -8,12 +8,12 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.MoOfflineSongsActivity import melody.offline.music.activity.MoOfflineSongsActivity
import relax.offline.music.activity.MoPlayDetailsActivity import melody.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.bean.OfflineBean import melody.offline.music.bean.OfflineBean
import relax.offline.music.databinding.OfflineListItemBinding import melody.offline.music.databinding.OfflineListItemBinding
import relax.offline.music.media.MediaControllerManager import melody.offline.music.media.MediaControllerManager
class OfflineSongsAdapter( class OfflineSongsAdapter(
private val context: Context, 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.Context
import android.content.Intent import android.content.Intent
@ -6,13 +6,13 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.PlayDetailsActivity import melody.offline.music.activity.PlayDetailsActivity
import relax.offline.music.bean.Audio import melody.offline.music.bean.Audio
import relax.offline.music.databinding.ParentsVoiceLayoutBinding import melody.offline.music.databinding.ParentsVoiceLayoutBinding
import relax.offline.music.util.containsContent import melody.offline.music.util.containsContent
import relax.offline.music.util.convertMillisToMinutesAndSecondsString import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets import melody.offline.music.util.getAudioDurationFromAssets
class ParentsVoiceAdapter( class ParentsVoiceAdapter(
private val context: Context, private val context: Context,
@ -52,8 +52,8 @@ class ParentsVoiceAdapter(
desc.text = convertMillisToMinutesAndSecondsString(s) desc.text = convertMillisToMinutesAndSecondsString(s)
} }
if (relax.offline.music.App.currentPlayingAudio != null) { if (melody.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.currentPlayingAudio?.file == audio.file) { if (melody.offline.music.App.currentPlayingAudio?.file == audio.file) {
playingLayout.visibility = View.VISIBLE playingLayout.visibility = View.VISIBLE
name.setTextColor(context.getColor(R.color.green)) name.setTextColor(context.getColor(R.color.green))
desc.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.annotation.SuppressLint
import android.content.Context import android.content.Context
@ -9,9 +9,9 @@ import androidx.media3.common.C
import androidx.media3.common.MediaItem import androidx.media3.common.MediaItem
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.databinding.PlayListItemBinding import melody.offline.music.databinding.PlayListItemBinding
import relax.offline.music.media.MediaControllerManager import melody.offline.music.media.MediaControllerManager
class PlayListAdapter( class PlayListAdapter(
private val context: Context, 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.Context
import android.content.Intent import android.content.Intent
@ -6,13 +6,13 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.PlayDetailsActivity import melody.offline.music.activity.PlayDetailsActivity
import relax.offline.music.bean.Audio import melody.offline.music.bean.Audio
import relax.offline.music.databinding.RealHumanVoiceLayoutBinding import melody.offline.music.databinding.RealHumanVoiceLayoutBinding
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
import relax.offline.music.util.convertMillisToMinutesAndSecondsString import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets import melody.offline.music.util.getAudioDurationFromAssets
class RealHumanVoiceAdapter( class RealHumanVoiceAdapter(
private val context: Context, private val context: Context,
@ -52,8 +52,8 @@ class RealHumanVoiceAdapter(
val s = getAudioDurationFromAssets(context, audio.file) val s = getAudioDurationFromAssets(context, audio.file)
desc.text = convertMillisToMinutesAndSecondsString(s) desc.text = convertMillisToMinutesAndSecondsString(s)
if (relax.offline.music.App.currentPlayingAudio != null) { if (melody.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.currentPlayingAudio?.file == audio.file) { if (melody.offline.music.App.currentPlayingAudio?.file == audio.file) {
name.setTextColor(context.getColor(R.color.green)) name.setTextColor(context.getColor(R.color.green))
desc.setTextColor(context.getColor(R.color.green)) desc.setTextColor(context.getColor(R.color.green))
} else { } else {

View File

@ -1,4 +1,4 @@
package relax.offline.music.adapter package melody.offline.music.adapter
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@ -7,12 +7,12 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.MoPlayDetailsActivity import melody.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.databinding.MusicResponsiveItemBinding import melody.offline.music.databinding.MusicResponsiveItemBinding
import relax.offline.music.innertube.models.MusicCarouselShelfRenderer import melody.offline.music.innertube.models.MusicCarouselShelfRenderer
import relax.offline.music.media.MediaControllerManager import melody.offline.music.media.MediaControllerManager
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
class ResponsiveListAdapter( class ResponsiveListAdapter(
private val context: Context, 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.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import relax.offline.music.databinding.SearchHistoryAdapterItemBinding import melody.offline.music.databinding.SearchHistoryAdapterItemBinding
class SearchHistoryAdapter( class SearchHistoryAdapter(
private val context: Context, 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.annotation.SuppressLint
import android.content.Context import android.content.Context
@ -7,12 +7,12 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.activity.MoListDetailsActivity import melody.offline.music.activity.MoListDetailsActivity
import relax.offline.music.activity.MoPlayDetailsActivity import melody.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.activity.MoSingerDetailsActivity import melody.offline.music.activity.MoSingerDetailsActivity
import relax.offline.music.databinding.SearchResultOtherItemBinding import melody.offline.music.databinding.SearchResultOtherItemBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
import relax.offline.music.util.LogTag import melody.offline.music.util.LogTag
class SearchResultOtherAdapter( class SearchResultOtherAdapter(
private val context: Context, 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.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import relax.offline.music.databinding.SearchSuggestionsAdapterItemBinding import melody.offline.music.databinding.SearchSuggestionsAdapterItemBinding
class SearchSuggestionsAdapter( class SearchSuggestionsAdapter(
private val context: Context, 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.annotation.SuppressLint
import android.content.Context import android.content.Context
@ -8,9 +8,9 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.activity.MoPlayDetailsActivity import melody.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.databinding.DetailsListItemBinding import melody.offline.music.databinding.DetailsListItemBinding
import relax.offline.music.innertube.models.MusicShelfRenderer import melody.offline.music.innertube.models.MusicShelfRenderer
class SingerDetailsSongListAdapter( class SingerDetailsSongListAdapter(
private val context: Context, 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.annotation.SuppressLint
import android.content.Context import android.content.Context
@ -7,11 +7,11 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.activity.MoListDetailsActivity import melody.offline.music.activity.MoListDetailsActivity
import relax.offline.music.activity.MoPlayDetailsActivity import melody.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.databinding.MusicTowRowItemBinding import melody.offline.music.databinding.MusicTowRowItemBinding
import relax.offline.music.databinding.SearchResultOtherItemBinding import melody.offline.music.databinding.SearchResultOtherItemBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
class SingerMoreSongAdapter( class SingerMoreSongAdapter(
private val context: Context, 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.Context
import android.content.Intent import android.content.Intent
@ -7,13 +7,13 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.PlayDetailsActivity import melody.offline.music.activity.PlayDetailsActivity
import relax.offline.music.bean.Audio import melody.offline.music.bean.Audio
import relax.offline.music.databinding.SoundsOfAppliancesLayoutBinding import melody.offline.music.databinding.SoundsOfAppliancesLayoutBinding
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
import relax.offline.music.util.convertMillisToMinutesAndSecondsString import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets import melody.offline.music.util.getAudioDurationFromAssets
class SoundsOfAppliancesAdapter( class SoundsOfAppliancesAdapter(
private val context: Context, private val context: Context,
@ -54,8 +54,8 @@ class SoundsOfAppliancesAdapter(
val s = getAudioDurationFromAssets(context, audio.file) val s = getAudioDurationFromAssets(context, audio.file)
desc.text = convertMillisToMinutesAndSecondsString(s) desc.text = convertMillisToMinutesAndSecondsString(s)
if (relax.offline.music.App.currentPlayingAudio != null) { if (melody.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.currentPlayingAudio?.file == audio.file) { if (melody.offline.music.App.currentPlayingAudio?.file == audio.file) {
playingLayout.visibility = View.VISIBLE playingLayout.visibility = View.VISIBLE
name.setTextColor(context.getColor(R.color.green)) name.setTextColor(context.getColor(R.color.green))
desc.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.Context
import android.content.Intent import android.content.Intent
@ -7,13 +7,13 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.PlayDetailsActivity import melody.offline.music.activity.PlayDetailsActivity
import relax.offline.music.bean.Audio import melody.offline.music.bean.Audio
import relax.offline.music.databinding.SoundsOfNatureLayoutBinding import melody.offline.music.databinding.SoundsOfNatureLayoutBinding
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
import relax.offline.music.util.convertMillisToMinutesAndSecondsString import melody.offline.music.util.convertMillisToMinutesAndSecondsString
import relax.offline.music.util.getAudioDurationFromAssets import melody.offline.music.util.getAudioDurationFromAssets
class SoundsOfNatureAdapter( class SoundsOfNatureAdapter(
private val context: Context, private val context: Context,
@ -54,8 +54,8 @@ class SoundsOfNatureAdapter(
val s = getAudioDurationFromAssets(context, audio.file) val s = getAudioDurationFromAssets(context, audio.file)
desc.text = convertMillisToMinutesAndSecondsString(s) desc.text = convertMillisToMinutesAndSecondsString(s)
if (relax.offline.music.App.currentPlayingAudio != null) { if (melody.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.currentPlayingAudio?.file == audio.file) { if (melody.offline.music.App.currentPlayingAudio?.file == audio.file) {
playingLayout.visibility = View.VISIBLE playingLayout.visibility = View.VISIBLE
name.setTextColor(context.getColor(R.color.green)) name.setTextColor(context.getColor(R.color.green))
desc.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.app.Activity
import android.content.Intent import android.content.Intent
@ -6,12 +6,12 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import relax.offline.music.activity.MoListDetailsActivity import melody.offline.music.activity.MoListDetailsActivity
import relax.offline.music.activity.MoPlayDetailsActivity import melody.offline.music.activity.MoPlayDetailsActivity
import relax.offline.music.activity.MoSingerDetailsActivity import melody.offline.music.activity.MoSingerDetailsActivity
import relax.offline.music.databinding.MusicTowRowItemBinding import melody.offline.music.databinding.MusicTowRowItemBinding
import relax.offline.music.innertube.models.MusicCarouselShelfRenderer import melody.offline.music.innertube.models.MusicCarouselShelfRenderer
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
class TowRowListAdapter( class TowRowListAdapter(
private val context: Activity, 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.annotation.Keep
import androidx.room.ColumnInfo import androidx.room.ColumnInfo

View File

@ -1,4 +1,4 @@
package relax.offline.music.bean package melody.offline.music.bean
import java.io.Serializable 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.ColumnInfo
import androidx.room.Entity 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.annotation.Keep
import androidx.room.ColumnInfo 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.annotation.Keep
import androidx.room.ColumnInfo import androidx.room.ColumnInfo

View File

@ -1,4 +1,4 @@
package relax.offline.music.bean package melody.offline.music.bean
import java.io.Serializable 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.Database
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import relax.offline.music.bean.Audio import melody.offline.music.bean.Audio
@Database(entities = [Audio::class], version = 1, exportSchema = false) @Database(entities = [Audio::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() { 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 android.content.Context
import androidx.room.Room import androidx.room.Room
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import relax.offline.music.bean.FavoriteBean import melody.offline.music.bean.FavoriteBean
import relax.offline.music.util.LogTag
class AppFavoriteDBManager private constructor(context: Context) { 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.Database
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import relax.offline.music.bean.FavoriteBean import melody.offline.music.bean.FavoriteBean
@Database(entities = [FavoriteBean::class], version = 1, exportSchema = false) @Database(entities = [FavoriteBean::class], version = 1, exportSchema = false)
abstract class AppFavoriteDatabase : RoomDatabase() { 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 android.content.Context
import androidx.room.Room import androidx.room.Room
import relax.offline.music.bean.OfflineBean import melody.offline.music.bean.OfflineBean
import relax.offline.music.util.LogTag
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext 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.Database
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import relax.offline.music.bean.OfflineBean import melody.offline.music.bean.OfflineBean
@Database(entities = [OfflineBean::class], version = 1, exportSchema = false) @Database(entities = [OfflineBean::class], version = 1, exportSchema = false)
abstract class AppOfflineDatabase : RoomDatabase() { 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.Database
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import relax.offline.music.bean.CurrentPlayingAudio import melody.offline.music.bean.CurrentPlayingAudio
@Database(entities = [CurrentPlayingAudio::class], version = 1, exportSchema = false) @Database(entities = [CurrentPlayingAudio::class], version = 1, exportSchema = false)
abstract class CurrentAudioDatabase : RoomDatabase() { 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 android.content.Context
import androidx.room.Room import androidx.room.Room
import relax.offline.music.bean.CurrentPlayingAudio import melody.offline.music.bean.CurrentPlayingAudio
class CurrentAudioManager private constructor(context: Context) { class CurrentAudioManager private constructor(context: Context) {
private val database: CurrentAudioDatabase = Room.databaseBuilder( 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.Dao
import androidx.room.Delete import androidx.room.Delete
@ -6,7 +6,7 @@ import androidx.room.Insert
import androidx.room.OnConflictStrategy import androidx.room.OnConflictStrategy
import androidx.room.Query import androidx.room.Query
import androidx.room.Update import androidx.room.Update
import relax.offline.music.bean.CurrentPlayingAudio import melody.offline.music.bean.CurrentPlayingAudio
@Dao @Dao
interface CurrentPlayingAudioDao { interface CurrentPlayingAudioDao {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package relax.offline.music.fragment package melody.offline.music.fragment
import android.Manifest import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
@ -21,11 +21,11 @@ import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.SettingsActivity import melody.offline.music.activity.SettingsActivity
import relax.offline.music.adapter.ParentsVoiceAdapter import melody.offline.music.adapter.ParentsVoiceAdapter
import relax.offline.music.bean.Audio import melody.offline.music.bean.Audio
import relax.offline.music.databinding.FragmentImportBinding import melody.offline.music.databinding.FragmentImportBinding
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -59,7 +59,7 @@ class ImportFragment : Fragment() {
checkAndRequestPermissions() checkAndRequestPermissions()
} }
importAdapterList.clear() importAdapterList.clear()
importAdapterList.addAll(relax.offline.music.App.importList) importAdapterList.addAll(melody.offline.music.App.importList)
parentsVoiceAdapter = ParentsVoiceAdapter(requireActivity(), importAdapterList) parentsVoiceAdapter = ParentsVoiceAdapter(requireActivity(), importAdapterList)
binding.importRv.layoutManager = binding.importRv.layoutManager =
LinearLayoutManager(requireActivity(), LinearLayoutManager.VERTICAL, false) LinearLayoutManager(requireActivity(), LinearLayoutManager.VERTICAL, false)
@ -105,12 +105,12 @@ class ImportFragment : Fragment() {
binding.noContentLayout.visibility = View.VISIBLE binding.noContentLayout.visibility = View.VISIBLE
} }
if (relax.offline.music.App.currentPlayingAudio != null) { if (melody.offline.music.App.currentPlayingAudio != null) {
if (relax.offline.music.App.importList.isNotEmpty()) { if (melody.offline.music.App.importList.isNotEmpty()) {
importAdapterList.clear() importAdapterList.clear()
importAdapterList.addAll(relax.offline.music.App.importList) importAdapterList.addAll(melody.offline.music.App.importList)
for ((index, audio) in importAdapterList.withIndex()) { 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() parentsVoiceAdapter?.notifyDataSetChanged()
break break
} }
@ -192,12 +192,12 @@ class ImportFragment : Fragment() {
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
if (audio.duration > 0) { if (audio.duration > 0) {
relax.offline.music.App.databaseManager.insertAudioFile(audio) melody.offline.music.App.databaseManager.insertAudioFile(audio)
} }
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
relax.offline.music.App.initImportAudio { melody.offline.music.App.initImportAudio {
importAdapterList.clear() importAdapterList.clear()
importAdapterList.addAll(relax.offline.music.App.importList) importAdapterList.addAll(melody.offline.music.App.importList)
parentsVoiceAdapter?.notifyDataSetChanged() parentsVoiceAdapter?.notifyDataSetChanged()
if (importAdapterList.isNotEmpty()) { if (importAdapterList.isNotEmpty()) {
binding.noContentLayout.visibility = View.GONE 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.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -8,8 +8,8 @@ import androidx.annotation.OptIn
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import relax.offline.music.sp.AppStore import melody.offline.music.sp.AppStore
import relax.offline.music.util.LogTag import melody.offline.music.util.LogTag
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope import kotlinx.coroutines.MainScope
import kotlinx.coroutines.cancel 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.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.databinding.FragmentMoHomeBinding import melody.offline.music.databinding.FragmentMoHomeBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
import relax.offline.music.innertube.models.MusicCarouselShelfRenderer import melody.offline.music.innertube.models.MusicCarouselShelfRenderer
import relax.offline.music.innertube.requests.homePage import melody.offline.music.innertube.requests.homePage
import relax.offline.music.innertube.requests.homePageMore import melody.offline.music.innertube.requests.homePageMore
import relax.offline.music.util.LogTag.LogD import melody.offline.music.util.LogTag.LogD
import relax.offline.music.view.MusicResponsiveListView import melody.offline.music.view.MusicResponsiveListView
import relax.offline.music.view.MusicTowRowListView import melody.offline.music.view.MusicTowRowListView
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select import kotlinx.coroutines.selects.select
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() { 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.content.Intent
import android.view.LayoutInflater import android.view.LayoutInflater
@ -8,13 +8,13 @@ import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select import kotlinx.coroutines.selects.select
import relax.offline.music.App import melody.offline.music.App
import relax.offline.music.R import melody.offline.music.R
import relax.offline.music.activity.MoLikedSongsActivity import melody.offline.music.activity.MoLikedSongsActivity
import relax.offline.music.activity.MoOfflineSongsActivity import melody.offline.music.activity.MoOfflineSongsActivity
import relax.offline.music.activity.SettingsActivity import melody.offline.music.activity.SettingsActivity
import relax.offline.music.databinding.FragmentMoMeBinding import melody.offline.music.databinding.FragmentMoMeBinding
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
class MoMeFragment : MoBaseFragment<FragmentMoMeBinding>() { 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.annotation.SuppressLint
import android.content.Context 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.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent import com.google.android.flexbox.JustifyContent
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import relax.offline.music.adapter.SearchHistoryAdapter import melody.offline.music.adapter.SearchHistoryAdapter
import relax.offline.music.adapter.SearchSuggestionsAdapter import melody.offline.music.adapter.SearchSuggestionsAdapter
import relax.offline.music.databinding.FragmentSearchBinding import melody.offline.music.databinding.FragmentSearchBinding
import relax.offline.music.innertube.Innertube import melody.offline.music.innertube.Innertube
import relax.offline.music.innertube.models.bodies.SearchBody import melody.offline.music.innertube.models.bodies.SearchBody
import relax.offline.music.innertube.models.bodies.SearchSuggestionsBody import melody.offline.music.innertube.models.bodies.SearchSuggestionsBody
import relax.offline.music.innertube.requests.moSearchPage import melody.offline.music.innertube.requests.moSearchPage
import relax.offline.music.innertube.requests.searchSuggestions import melody.offline.music.innertube.requests.searchSuggestions
import relax.offline.music.util.LogTag import melody.offline.music.util.LogTag
import relax.offline.music.view.SearchResultOptimalView import melody.offline.music.view.SearchResultOptimalView
import relax.offline.music.view.SearchResultOtherView import melody.offline.music.view.SearchResultOtherView
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select import kotlinx.coroutines.selects.select
import org.json.JSONObject import org.json.JSONObject
import relax.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
class SearchFragment : MoBaseFragment<FragmentSearchBinding>(), TextWatcher, class SearchFragment : MoBaseFragment<FragmentSearchBinding>(), TextWatcher,
View.OnFocusChangeListener, SearchSuggestionsAdapter.OnItemClickListener, 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.Context
import android.content.pm.PackageInfo import android.content.pm.PackageInfo
@ -7,8 +7,8 @@ import android.media.MediaDrm
import android.os.Build import android.os.Build
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.text.TextUtils import android.text.TextUtils
import relax.offline.music.App import melody.offline.music.App
import relax.offline.music.sp.AppStore import melody.offline.music.sp.AppStore
import java.security.MessageDigest import java.security.MessageDigest
import java.security.NoSuchAlgorithmException import java.security.NoSuchAlgorithmException
import java.util.UUID 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 android.content.Context
import com.google.gson.Gson import com.google.gson.Gson
import org.json.JSONException import org.json.JSONException
import org.json.JSONObject import org.json.JSONObject
import relax.offline.music.App import melody.offline.music.App
import relax.offline.music.util.AesEncryptUtil import melody.offline.music.util.AesEncryptUtil
import java.util.Locale import java.util.Locale
import java.util.UUID 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.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import org.json.JSONObject import org.json.JSONObject
import relax.offline.music.App import melody.offline.music.App
import relax.offline.music.sp.AppStore import melody.offline.music.sp.AppStore
import relax.offline.music.util.AesEncryptUtil import melody.offline.music.util.AesEncryptUtil
import relax.offline.music.util.LogTag import melody.offline.music.util.LogTag
import java.io.IOException import java.io.IOException
class CommonIpInfoUtil { class CommonIpInfoUtil {

View File

@ -1,4 +1,4 @@
package relax.offline.music.http package melody.offline.music.http
import java.io.IOException 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.content.Context
import android.net.ConnectivityManager import android.net.ConnectivityManager

View File

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

View File

@ -1,4 +1,4 @@
package relax.offline.music.http package melody.offline.music.http
import java.io.Serializable 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 android.content.Context
import okhttp3.Call import okhttp3.Call
import okhttp3.Response import okhttp3.Response
import org.json.JSONObject import org.json.JSONObject
import relax.offline.music.sp.AppStore import melody.offline.music.sp.AppStore
import relax.offline.music.util.LogTag import melody.offline.music.util.LogTag
import java.io.IOException import java.io.IOException
class UploadEventName { 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 melody.offline.music.innertube.models.MusicCarouselShelfRenderer
import relax.offline.music.innertube.models.MusicShelfRenderer import melody.offline.music.innertube.models.MusicShelfRenderer
import relax.offline.music.innertube.models.NavigationEndpoint import melody.offline.music.innertube.models.NavigationEndpoint
import relax.offline.music.innertube.models.Runs import melody.offline.music.innertube.models.Runs
import relax.offline.music.innertube.models.Thumbnail import melody.offline.music.innertube.models.Thumbnail
import relax.offline.music.innertube.utils.brotli import melody.offline.music.innertube.utils.brotli
import relax.offline.music.util.LogTag import melody.offline.music.util.LogTag
import io.ktor.client.HttpClient import io.ktor.client.HttpClient
import io.ktor.client.engine.okhttp.OkHttp import io.ktor.client.engine.okhttp.OkHttp
import io.ktor.client.plugins.BrowserUserAgent 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.ExperimentalSerializationApi
import kotlinx.serialization.Serializable 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 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 kotlinx.serialization.Serializable
import java.util.Locale 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.ExperimentalSerializationApi
import kotlinx.serialization.Serializable 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.ExperimentalSerializationApi
import kotlinx.serialization.Serializable 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 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 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 kotlinx.serialization.Serializable
@ -19,7 +19,7 @@ data class MusicCardShelfRenderer(
) { ) {
@Serializable @Serializable
data class Thumbnail( 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 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.ExperimentalSerializationApi
import kotlinx.serialization.Serializable 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 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 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 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.ExperimentalSerializationApi
import kotlinx.serialization.Serializable 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 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 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 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 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 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.ExperimentalSerializationApi
import kotlinx.serialization.Serializable 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.ExperimentalSerializationApi
import kotlinx.serialization.Serializable 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 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 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.ExperimentalSerializationApi
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@ -16,7 +16,7 @@ data class ThumbnailRenderer(
) { ) {
@Serializable @Serializable
data class Thumbnail( 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 import kotlinx.serialization.Serializable
@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 import kotlinx.serialization.Serializable
@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 import kotlinx.serialization.Serializable
@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 import kotlinx.serialization.Serializable
@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 import kotlinx.serialization.Serializable
@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 import kotlinx.serialization.Serializable
@Serializable @Serializable

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