|
|
@ -39,7 +39,7 @@ class QQMusicSingleton private constructor() { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private var activity: Activity? = null |
|
|
private var context: Context? = null |
|
|
private var loginManager: QQMusicLoginManager? = null |
|
|
private var loginManager: QQMusicLoginManager? = null |
|
|
private var musicManager: QQMusicManager? = null |
|
|
private var musicManager: QQMusicManager? = null |
|
|
private val handler = Handler(Looper.getMainLooper()) |
|
|
private val handler = Handler(Looper.getMainLooper()) |
|
|
@ -51,9 +51,9 @@ class QQMusicSingleton private constructor() { |
|
|
/** |
|
|
/** |
|
|
* 初始化单例,设置Activity上下文 |
|
|
* 初始化单例,设置Activity上下文 |
|
|
*/ |
|
|
*/ |
|
|
fun initialize(activity: Activity) { |
|
|
fun initialize(context: Context) { |
|
|
this.activity = activity |
|
|
this.context = context |
|
|
this.sharedPreferences = activity.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE) |
|
|
this.sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE) |
|
|
loadSavedLoginInfo() |
|
|
loadSavedLoginInfo() |
|
|
Log.d(TAG, "QQ音乐单例初始化完成") |
|
|
Log.d(TAG, "QQ音乐单例初始化完成") |
|
|
} |
|
|
} |
|
|
@ -72,7 +72,7 @@ class QQMusicSingleton private constructor() { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return try { |
|
|
return try { |
|
|
this.activity?.packageManager?.getPackageInfo(packageName, 0) |
|
|
this.context?.packageManager?.getPackageInfo(packageName, 0) |
|
|
Log.d(TAG, "QQ音乐app已安装: $packageName") |
|
|
Log.d(TAG, "QQ音乐app已安装: $packageName") |
|
|
true |
|
|
true |
|
|
} catch (e: PackageManager.NameNotFoundException) { |
|
|
} catch (e: PackageManager.NameNotFoundException) { |
|
|
@ -113,7 +113,7 @@ class QQMusicSingleton private constructor() { |
|
|
callback(Result.failure(Exception("未安装QQ音乐软件,请先安装QQ音乐软件"))) |
|
|
callback(Result.failure(Exception("未安装QQ音乐软件,请先安装QQ音乐软件"))) |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
val currentActivity = activity |
|
|
val currentActivity = context |
|
|
// 先检查是否已经登录且未过期 |
|
|
// 先检查是否已经登录且未过期 |
|
|
if (isLoggedIn()) { |
|
|
if (isLoggedIn()) { |
|
|
Log.d(TAG, "用户已登录且未过期,直接返回登录信息") |
|
|
Log.d(TAG, "用户已登录且未过期,直接返回登录信息") |
|
|
@ -159,7 +159,7 @@ class QQMusicSingleton private constructor() { |
|
|
callback(Result.failure(Exception("未安装QQ音乐软件,请先安装QQ音乐软件"))) |
|
|
callback(Result.failure(Exception("未安装QQ音乐软件,请先安装QQ音乐软件"))) |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
val currentActivity = activity |
|
|
val currentActivity = context |
|
|
|
|
|
|
|
|
// 先检查是否已经登录且未过期 |
|
|
// 先检查是否已经登录且未过期 |
|
|
if (isLoggedIn()) { |
|
|
if (isLoggedIn()) { |
|
|
@ -206,7 +206,7 @@ class QQMusicSingleton private constructor() { |
|
|
retryCount: Int, |
|
|
retryCount: Int, |
|
|
callback: (Result<List<Map<String, Any?>>>) -> Unit |
|
|
callback: (Result<List<Map<String, Any?>>>) -> Unit |
|
|
) { |
|
|
) { |
|
|
val currentActivity = activity |
|
|
val currentActivity = context |
|
|
if (currentActivity == null) { |
|
|
if (currentActivity == null) { |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
return |
|
|
return |
|
|
@ -240,7 +240,7 @@ class QQMusicSingleton private constructor() { |
|
|
retryCount: Int, |
|
|
retryCount: Int, |
|
|
callback: (Result<List<Map<String, Any?>>>) -> Unit |
|
|
callback: (Result<List<Map<String, Any?>>>) -> Unit |
|
|
) { |
|
|
) { |
|
|
val currentActivity = activity ?: return |
|
|
val currentActivity = context ?: return |
|
|
val searchKey = "${keyword}_${System.currentTimeMillis()}" |
|
|
val searchKey = "${keyword}_${System.currentTimeMillis()}" |
|
|
var completed = false |
|
|
var completed = false |
|
|
|
|
|
|
|
|
@ -336,7 +336,7 @@ class QQMusicSingleton private constructor() { |
|
|
index: Int, |
|
|
index: Int, |
|
|
callback: (Result<Unit>) -> Unit |
|
|
callback: (Result<Unit>) -> Unit |
|
|
) { |
|
|
) { |
|
|
val currentActivity = activity |
|
|
val currentActivity = context |
|
|
if (currentActivity == null) { |
|
|
if (currentActivity == null) { |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
return |
|
|
return |
|
|
@ -369,7 +369,7 @@ class QQMusicSingleton private constructor() { |
|
|
index: Int, |
|
|
index: Int, |
|
|
callback: (Result<Unit>) -> Unit |
|
|
callback: (Result<Unit>) -> Unit |
|
|
) { |
|
|
) { |
|
|
val currentActivity = activity ?: return |
|
|
val currentActivity = context ?: return |
|
|
|
|
|
|
|
|
ensureMusicManager(currentActivity) |
|
|
ensureMusicManager(currentActivity) |
|
|
musicManager?.playSongs(songMids, index, object : QQMusicManager.PlayCallback { |
|
|
musicManager?.playSongs(songMids, index, object : QQMusicManager.PlayCallback { |
|
|
@ -481,7 +481,7 @@ class QQMusicSingleton private constructor() { |
|
|
* 获取播放时间 |
|
|
* 获取播放时间 |
|
|
*/ |
|
|
*/ |
|
|
fun getPlayTime(callback: (Result<PlayTimeInfo>) -> Unit) { |
|
|
fun getPlayTime(callback: (Result<PlayTimeInfo>) -> Unit) { |
|
|
val currentActivity = activity |
|
|
val currentActivity = context |
|
|
if (currentActivity == null) { |
|
|
if (currentActivity == null) { |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
return |
|
|
return |
|
|
@ -512,13 +512,13 @@ class QQMusicSingleton private constructor() { |
|
|
* 同步当前播放信息 - 统一接口 |
|
|
* 同步当前播放信息 - 统一接口 |
|
|
*/ |
|
|
*/ |
|
|
fun syncCurrentPlayInfo(callback: (Result<Map<String, Any?>>) -> Unit) { |
|
|
fun syncCurrentPlayInfo(callback: (Result<Map<String, Any?>>) -> Unit) { |
|
|
val currentActivity = activity |
|
|
val currentcontext = context |
|
|
if (currentActivity == null) { |
|
|
if (currentcontext == null) { |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
ensureMusicManager(currentActivity) |
|
|
ensureMusicManager(currentcontext) |
|
|
musicManager?.syncCurrentPlayInfo(object : QQMusicManager.InfoCallback { |
|
|
musicManager?.syncCurrentPlayInfo(object : QQMusicManager.InfoCallback { |
|
|
override fun onSuccess(data: Map<String, Any?>) { |
|
|
override fun onSuccess(data: Map<String, Any?>) { |
|
|
handler.post { |
|
|
handler.post { |
|
|
@ -549,7 +549,7 @@ class QQMusicSingleton private constructor() { |
|
|
loginManager = null |
|
|
loginManager = null |
|
|
musicManager?.cleanup() |
|
|
musicManager?.cleanup() |
|
|
musicManager = null |
|
|
musicManager = null |
|
|
activity = null |
|
|
context = null |
|
|
Log.d(TAG, "QQ音乐单例资源清理完成") |
|
|
Log.d(TAG, "QQ音乐单例资源清理完成") |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -598,9 +598,9 @@ class QQMusicSingleton private constructor() { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 私有辅助方法 |
|
|
// 私有辅助方法 |
|
|
private fun ensureMusicManager(activity: Activity) { |
|
|
private fun ensureMusicManager(context: Context) { |
|
|
if (musicManager == null) { |
|
|
if (musicManager == null) { |
|
|
musicManager = QQMusicManager(activity) |
|
|
musicManager = QQMusicManager(context) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -609,7 +609,7 @@ class QQMusicSingleton private constructor() { |
|
|
action: (QQMusicManager, QQMusicManager.PlayCallback) -> Unit |
|
|
action: (QQMusicManager, QQMusicManager.PlayCallback) -> Unit |
|
|
): (callback: (Result<Unit>) -> Unit) -> Unit { |
|
|
): (callback: (Result<Unit>) -> Unit) -> Unit { |
|
|
return lambda@{ callback -> |
|
|
return lambda@{ callback -> |
|
|
val currentActivity = activity |
|
|
val currentActivity = context |
|
|
if (currentActivity == null) { |
|
|
if (currentActivity == null) { |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
return@lambda |
|
|
return@lambda |
|
|
@ -639,13 +639,13 @@ class QQMusicSingleton private constructor() { |
|
|
action: (QQMusicManager, QQMusicManager.InfoCallback) -> Unit |
|
|
action: (QQMusicManager, QQMusicManager.InfoCallback) -> Unit |
|
|
): (callback: (Result<Map<String, Any?>>) -> Unit) -> Unit { |
|
|
): (callback: (Result<Map<String, Any?>>) -> Unit) -> Unit { |
|
|
return lambda@{ callback -> |
|
|
return lambda@{ callback -> |
|
|
val currentActivity = activity |
|
|
val currentcontext = context |
|
|
if (currentActivity == null) { |
|
|
if (currentcontext == null) { |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
return@lambda |
|
|
return@lambda |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
ensureMusicManager(currentActivity) |
|
|
ensureMusicManager(currentcontext) |
|
|
action(musicManager!!, object : QQMusicManager.InfoCallback { |
|
|
action(musicManager!!, object : QQMusicManager.InfoCallback { |
|
|
override fun onSuccess(data: Map<String, Any?>) { |
|
|
override fun onSuccess(data: Map<String, Any?>) { |
|
|
handler.post { |
|
|
handler.post { |
|
|
|