@@ -5,13 +5,16 @@ import android.content.Intent
55import android.net.Uri
66import kotlinx.coroutines.Dispatchers
77import kotlinx.coroutines.withContext
8+ import android.util.Log
89import me.bmax.apatch.BuildConfig
910import java.io.BufferedReader
1011import java.io.InputStreamReader
1112import java.net.HttpURLConnection
1213import java.net.URL
14+ import java.nio.charset.StandardCharsets
1315
1416object UpdateChecker {
17+ private const val TAG = " UpdateChecker"
1518 // Placeholder URL for version file.
1619 // It is expected to return a plain text integer version code.
1720 private const val UPDATE_API_URL = " https://folk.mysqil.com/api/version.php"
@@ -31,18 +34,25 @@ object UpdateChecker {
3134 connection.readTimeout = 5000
3235
3336 if (connection.responseCode == HttpURLConnection .HTTP_OK ) {
34- val reader = BufferedReader (InputStreamReader (connection.inputStream))
35- val remoteVersionCodeStr = reader.readText().trim ()
37+ val reader = BufferedReader (InputStreamReader (connection.inputStream, StandardCharsets . UTF_8 ))
38+ val rawResponse = reader.readText()
3639 reader.close()
3740
41+ // Handle BOM and trim
42+ val remoteVersionCodeStr = rawResponse.replace(" \uFEFF " , " " ).trim()
43+ Log .d(TAG , " Raw response: '$rawResponse ', Parsed string: '$remoteVersionCodeStr '" )
44+
3845 val remoteVersionCode = remoteVersionCodeStr.toIntOrNull()
3946 if (remoteVersionCode != null ) {
47+ Log .d(TAG , " Remote: $remoteVersionCode , Local: ${BuildConfig .VERSION_CODE } " )
4048 return @withContext remoteVersionCode > BuildConfig .VERSION_CODE
49+ } else {
50+ Log .e(TAG , " Failed to parse version code" )
4151 }
4252 }
4353 false
4454 } catch (e: Exception ) {
45- e.printStackTrace( )
55+ Log .e( TAG , " Check update failed " , e )
4656 false
4757 }
4858 }
0 commit comments