diff --git a/HISTORY.md b/HISTORY.md index 00f1e18c..f2828aac 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,10 @@ ## 更新日志 +### v1.9.8(通用) + +* 优化在线升级 +* 优化可能状态错误的问题 + ### v1.9.6(通用) * 优化在线升级 @@ -41,6 +46,8 @@ * 修复无法播放问题 +### 以下已不可用 + ### v1.8.0(通用) * 修复返回键无法退出问题 @@ -176,8 +183,6 @@ * 修复播放失败的问题 -### 以下已不可用 - ### v1.5.3(安卓5及以上专用) * 修复部分情况下APP切换后无法继续播放的问题 diff --git a/app/src/main/java/com/lizongying/mytv/SettingFragment.kt b/app/src/main/java/com/lizongying/mytv/SettingFragment.kt index 612c6d2c..40da69ef 100644 --- a/app/src/main/java/com/lizongying/mytv/SettingFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/SettingFragment.kt @@ -1,11 +1,16 @@ package com.lizongying.mytv +import android.Manifest +import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.WindowManager +import android.widget.Toast +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat import androidx.core.view.marginEnd import androidx.core.view.marginTop import androidx.fragment.app.DialogFragment @@ -87,13 +92,10 @@ class SettingFragment : DialogFragment() { } } - updateManager = UpdateManager(context, context.appVersionCode) - binding.checkVersion.setOnClickListener( - OnClickListenerCheckVersion( - activity as MainActivity, - updateManager - ) - ) + binding.checkVersion.setOnClickListener { + (activity as MainActivity).settingDelayHide() + requestInstallPermissions() + } val application = requireActivity().applicationContext as MyTvApplication @@ -162,20 +164,63 @@ class SettingFragment : DialogFragment() { return binding.root } - fun setVersionName(versionName: String) { - if (_binding != null) { - binding.versionName.text = versionName + private fun requestInstallPermissions() { + val context = requireContext() + val permissionsList: MutableList = ArrayList() + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !context.packageManager.canRequestPackageInstalls()) { + permissionsList.add(Manifest.permission.REQUEST_INSTALL_PACKAGES) + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && + ContextCompat.checkSelfPermission( + context, + Manifest.permission.READ_EXTERNAL_STORAGE + ) != PackageManager.PERMISSION_GRANTED + ) { + permissionsList.add(Manifest.permission.READ_EXTERNAL_STORAGE) + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && + ContextCompat.checkSelfPermission( + context, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) != PackageManager.PERMISSION_GRANTED + ) { + permissionsList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE) + } + + if (permissionsList.isNotEmpty()) { + ActivityCompat.requestPermissions( + requireActivity(), + permissionsList.toTypedArray(), + PERMISSIONS_REQUEST_CODE + ) + } else { + UpdateManager(context, context.appVersionCode).checkAndUpdate() } } - internal class OnClickListenerCheckVersion( - private val mainActivity: MainActivity, - private val updateManager: UpdateManager - ) : - View.OnClickListener { - override fun onClick(view: View?) { - mainActivity.settingDelayHide() - updateManager.checkAndUpdate() + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array, + grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == PERMISSIONS_REQUEST_CODE) { + var allPermissionsGranted = true + for (result in grantResults) { + if (result != PackageManager.PERMISSION_GRANTED) { + allPermissionsGranted = false + break + } + } + if (allPermissionsGranted) { + val context = requireContext() + UpdateManager(context, context.appVersionCode).checkAndUpdate() + } else { + Toast.makeText(context, "权限授权失败", Toast.LENGTH_LONG).show() + } } } @@ -186,6 +231,7 @@ class SettingFragment : DialogFragment() { companion object { const val TAG = "SettingFragment" + const val PERMISSIONS_REQUEST_CODE = 1 } } diff --git a/app/src/main/java/com/lizongying/mytv/UpdateManager.kt b/app/src/main/java/com/lizongying/mytv/UpdateManager.kt index 5cb4aa8d..0cb44bec 100644 --- a/app/src/main/java/com/lizongying/mytv/UpdateManager.kt +++ b/app/src/main/java/com/lizongying/mytv/UpdateManager.kt @@ -1,6 +1,5 @@ package com.lizongying.mytv -import android.app.Activity import android.app.DownloadManager import android.app.DownloadManager.Request import android.content.BroadcastReceiver @@ -14,9 +13,6 @@ import android.os.Environment import android.os.Handler import android.os.Looper import android.util.Log -import androidx.core.app.ActivityCompat -import androidx.core.content.PermissionChecker -import androidx.core.content.PermissionChecker.checkSelfPermission import androidx.fragment.app.FragmentActivity import com.lizongying.mytv.api.ApiClient import com.lizongying.mytv.requests.ReleaseRequest @@ -39,9 +35,6 @@ class UpdateManager( private var downloadReceiver: DownloadReceiver? = null fun checkAndUpdate() { - if (!haveStoragePermission()) { - return - } CoroutineScope(Dispatchers.Main).launch { var text = "版本获取失败" var update = false @@ -68,36 +61,7 @@ class UpdateManager( dialog.show((context as FragmentActivity).supportFragmentManager, TAG) } - private fun haveStoragePermission(): Boolean { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (checkSelfPermission(context, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) - === PermissionChecker.PERMISSION_GRANTED - ) { - Log.e("Permission error", "You have permission") - return true - } else { - Log.e("Permission error", "You have asked for permission") - ActivityCompat.requestPermissions( - context as Activity, arrayOf( - android.Manifest.permission.WRITE_EXTERNAL_STORAGE - ), 1 - ) - return false - } - } else { //you don't need to worry about these stuff below api level 23 - Log.e("Permission error", "You already have the permission") - return true - } - } - - private fun startDownload(release: ReleaseResponse) { - val packageInstaller = context.packageManager - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - if (!packageInstaller.canRequestPackageInstalls()) { - } - } - val apkName = "my-tv" val apkFileName = "$apkName-${release.version_name}.apk" Log.i(TAG, "apkFileName $apkFileName") diff --git a/app/src/main/java/com/lizongying/mytv/Utils.kt b/app/src/main/java/com/lizongying/mytv/Utils.kt index 467afe7d..2e4e383a 100644 --- a/app/src/main/java/com/lizongying/mytv/Utils.kt +++ b/app/src/main/java/com/lizongying/mytv/Utils.kt @@ -2,7 +2,6 @@ package com.lizongying.mytv import android.content.res.Resources import android.os.Build -import android.util.Log import android.util.TypedValue import com.google.gson.Gson import com.lizongying.mytv.api.TimeResponse @@ -37,13 +36,14 @@ object Utils { } suspend fun init() { - var currentTimeMillis: Long = 0 try { - currentTimeMillis = getTimestampFromServer() + val currentTimeMillis = getTimestampFromServer() + if (currentTimeMillis > 0) { + between = System.currentTimeMillis() - currentTimeMillis + } } catch (e: Exception) { println("Failed to retrieve timestamp from server: ${e.message}") } - between = System.currentTimeMillis() - currentTimeMillis withContext(Dispatchers.Main) { listener?.onRequestFinished(null) @@ -71,8 +71,6 @@ object Utils { private suspend fun getTimestampFromServer(): Long { return withContext(Dispatchers.IO) { val client = okhttp3.OkHttpClient.Builder() - .connectTimeout(500, java.util.concurrent.TimeUnit.MILLISECONDS) - .readTimeout(1, java.util.concurrent.TimeUnit.SECONDS) .addInterceptor(RetryInterceptor(3)) .build() val request = okhttp3.Request.Builder() @@ -85,7 +83,6 @@ object Utils { Gson().fromJson(string, TimeResponse::class.java).data.t.toLong() } } catch (e: IOException) { - // Handle network errors throw IOException("Error during network request", e) } } diff --git a/version.json b/version.json index 39b93f82..88ab9fe8 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version_code": 17368576, "version_name": "v1.9.6"} +{"version_code": 17369088, "version_name": "v1.9.8"}