diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e4c6ef9..b67116e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -19,8 +19,8 @@ android { applicationId = "com.iptv807.tv" minSdk = 21 targetSdk = 35 - versionCode = 950 - versionName = "9.5.0" + versionCode = 960 + versionName = "9.6.0" } signingConfigs { diff --git a/app/src/main/java/com/iptv807/tv/MainActivity.kt b/app/src/main/java/com/iptv807/tv/MainActivity.kt index 8046cf1..e1bcd86 100644 --- a/app/src/main/java/com/iptv807/tv/MainActivity.kt +++ b/app/src/main/java/com/iptv807/tv/MainActivity.kt @@ -123,6 +123,13 @@ class MainActivity : Activity() { private var updateOverlay: View? = null private var pendingUpdate: AuthApi.UpdateInfo? = null private var downloadId = -1L + /** + * ★ 2026-10-15 起:暂时全面免费 —— 关闭授权限制与全部授权提示。 + * 保留不变:安装统计(check-update)、在线统计(heartbeat 心跳)、公告推送(announcements)。 + * 将来恢复授权:把这里改回 true 即可(限制与提示逻辑均原样保留在下方各分支里)。 + */ + private val authGateEnabled = false + private val heartbeatTask = object : Runnable { override fun run() { Thread { @@ -380,7 +387,12 @@ class MainActivity : Activity() { runOnUiThread { isVip = r.ok prefs.edit().putBoolean("is_vip", r.ok).apply() - if (r.ok) { + if (!authGateEnabled) { + // 暂时全面免费:隐藏所有授权相关 UI,不进入任何限制模式 + trialText.visibility = View.GONE + showAuthButton(false) + showAuthState(false) + } else if (r.ok) { trialText.visibility = View.GONE; trialText.text = "VIP" showAuthButton(false) showAuthState(true) // 右下角显示「✓ 已授权」 @@ -536,6 +548,8 @@ class MainActivity : Activity() { } private fun onUiTick() { + // ★ 暂时全面免费:不显示任何倒计时/试用提示,也不触发到期引导页 + if (!authGateEnabled) { trialText.visibility = View.GONE; return } if (isVip) return // 每秒累计一次免费用量(试用期内 LicenseClient 内部会跳过,不计用量) if (player?.isPlaying == true) LicenseClient.addFreeUsedMs(this, 1000) @@ -1118,20 +1132,15 @@ class MainActivity : Activity() { }.getOrDefault(AuthApi.UpdateInfo(msg = AuthApi.lastError)) runOnUiThread { if (info.ok) { - val sb = StringBuilder("安装上报 ok #${info.installId} · v${AuthApi.clientVersion(this)}") - if (info.updateAvailable) sb.append(" · 发现新版 v${info.latestVersion}") - statusText.text = sb.toString() - handler.postDelayed({ - val c = channels.getOrNull(currentChannel) - if (c != null) statusText.text = "▶ ${c.num} ${c.name}" - }, 8000) + // ★ 不再把「安装上报 ok #xxx」写到左上角(用户要求去掉该提示); + // 上报请求本身照常发出 → 安装统计 / 在线统计 / 版本检查均不受影响。 + // statusText 交回频道显示逻辑(切换频道时显示「▶ 频道号 频道名」)。 if (info.updateAvailable) { pendingUpdate = info showUpdateDialog(info) } - } else { - statusText.text = "安装上报失败: ${info.msg}" } + // 上报失败也不再提示(保持界面干净),失败信息静默丢弃 } }.start() handler.removeCallbacks(heartbeatTask)