SplashViewModel.kt 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package com.vpn.fastestvpnservice.viewmodels
  2. import android.content.Context
  3. import android.content.pm.ActivityInfo
  4. import android.util.Log
  5. import androidx.lifecycle.LiveData
  6. import androidx.lifecycle.MutableLiveData
  7. import androidx.lifecycle.ViewModel
  8. import com.google.gson.Gson
  9. import com.google.gson.reflect.TypeToken
  10. import com.vpn.fastestvpnservice.beans.DataResponseServers
  11. import com.vpn.fastestvpnservice.beans.ServerData
  12. import com.vpn.fastestvpnservice.constants.AppEnum
  13. import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
  14. import com.vpn.fastestvpnservice.openVpnUtils.EncryptData
  15. import com.vpn.fastestvpnservice.retrofit.RetrofitNetworkHandling
  16. import com.vpn.fastestvpnservice.retrofit.WebServiceFactory
  17. import com.vpn.fastestvpnservice.screens.isServerModelInitialized
  18. import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
  19. import com.vpn.fastestvpnservice.utils.StaticMethods
  20. import retrofit2.Call
  21. import java.io.BufferedReader
  22. import java.io.InputStream
  23. import java.io.InputStreamReader
  24. class SplashViewModel constructor(context: Context): ViewModel() {
  25. var mutableLiveDataServerData = MutableLiveData<DataResponseServers<ArrayList<ServerData>>>()
  26. var liveDataServerData: LiveData<DataResponseServers<ArrayList<ServerData>>> = mutableLiveDataServerData
  27. var mutableLiveDataLanguageStatus = MutableLiveData<Boolean>(false)
  28. var liveDataLanguageStatus: LiveData<Boolean> = mutableLiveDataLanguageStatus
  29. var preferenceHelper: BasePreferenceHelper
  30. var context: Context
  31. init {
  32. this.context = context
  33. preferenceHelper = BasePreferenceHelper(context)
  34. val jsonAppDetails = getJsonAppDetails()
  35. val jsonFileDetails = getJsonFileDetails()
  36. jsonAppDetails?.let {
  37. val En = EncryptData()
  38. preferenceHelper.saveAppDetails(En.encrypt(it))
  39. }
  40. jsonFileDetails?.let {
  41. val En = EncryptData()
  42. preferenceHelper.saveFileDetails(En.encrypt(it))
  43. }
  44. }
  45. fun serverDataApi() {
  46. Log.d("test_api_response_s", "serverDataApi called()")
  47. WebServiceFactory.getInstance().serverDataApi().enqueue(
  48. RetrofitNetworkHandling<Any>(object :
  49. RetrofitNetworkHandling.ResponseCallback<Any> {
  50. override fun onSuccess(call: Call<Any>?, response: Any?) {
  51. try {
  52. val gson = Gson()
  53. val jsonString = gson.toJson(response)
  54. val type = object : TypeToken<DataResponseServers<ArrayList<ServerData>>>() {}.type
  55. val data = gson.fromJson<DataResponseServers<ArrayList<ServerData>>>(jsonString, type)
  56. if (data?.status == true) {
  57. Log.d("test_api_response_s", "response true")
  58. mutableLiveDataServerData.value = data
  59. data.data?.let { preferenceHelper.saveServerData(it) }
  60. data.wireguard?.let {wg ->
  61. if (wg.ip?.isNotEmpty() == true && wg.key?.isNotEmpty() == true){
  62. Log.d("test_wg_data", "WG isNotEmpty")
  63. preferenceHelper.saveWireGuard(wg)
  64. } else {
  65. Log.d("test_wg_data", "WG isEmpty")
  66. }
  67. }
  68. data.product?.let {
  69. // Log.d("test_api_response", it.productName.toString())
  70. preferenceHelper.saveProduct(it)
  71. }
  72. data.available_protocols.let {
  73. preferenceHelper.saveAvailableProtocols(it)
  74. }
  75. data.enabled_protocols.let {
  76. preferenceHelper.saveEnabledProtocols(it)
  77. }
  78. if (isServerModelInitialized) {
  79. Log.d("test_api_response_s", "serverDataApi isServerModelInitialized")
  80. if (StaticMethods.isTV(context)) {
  81. Log.d("test_api_response_s", "serverDataApi TV")
  82. serverListViewModelSplash.setCountryDataTV()
  83. } else {
  84. Log.d("test_api_response_s", "serverDataApi Android")
  85. serverListViewModelSplash.setRecommendedSmartServers()
  86. serverListViewModelSplash.setCountryData()
  87. }
  88. }
  89. // Log.d("test_api_response", data.data.toString())
  90. // Log.d("test_api_response", data.enabled_protocols.toString())
  91. // Log.d("test_api_response", data.available_protocols.toString())
  92. }
  93. } catch (ex: Exception) {
  94. Log.d("test_api_response_s", "server catch")
  95. }
  96. }
  97. override fun onFail(call: Call<Any>?, response: Any?) {
  98. Log.d("test_api_response_s", "serverDataApi onFail")
  99. mutableLiveDataLanguageStatus.value = false
  100. }
  101. override fun onError(call: Call<Any>?, response: Any?) {
  102. Log.d("test_api_response_s", "serverDataApi onError")
  103. mutableLiveDataLanguageStatus.value = false
  104. }
  105. }
  106. )
  107. )
  108. }
  109. private fun getJsonFileDetails(): String? {
  110. val protocol = AppEnum.UDP_PROTOCOL.key
  111. var conf: InputStream? = null
  112. try {
  113. conf = if (protocol.equals(AppEnum.TCP_PROTOCOL.key, ignoreCase = true)) {
  114. context.assets.open("fileDetails/fileDetails.json")
  115. } else {
  116. context.assets.open("fileDetails/fileDetails.json")
  117. }
  118. } catch (e: Exception) {
  119. e.printStackTrace()
  120. }
  121. var bufferedReader: BufferedReader? = null
  122. var isr: InputStreamReader? = null
  123. try {
  124. isr = InputStreamReader(conf)
  125. } catch (e: Exception) {
  126. e.printStackTrace()
  127. }
  128. try {
  129. bufferedReader = BufferedReader(isr)
  130. val total = StringBuilder()
  131. var line: String?
  132. while (bufferedReader.readLine().also { line = it } != null) {
  133. total.append(line).append('\n')
  134. }
  135. return total.toString()
  136. } catch (e: Exception) {
  137. e.printStackTrace()
  138. }
  139. return ""
  140. }
  141. private fun getJsonAppDetails(): String? {
  142. var conf: InputStream? = null
  143. try {
  144. conf = context.assets.open("appDetails/appDetails.json")
  145. } catch (e: Exception) {
  146. e.printStackTrace()
  147. }
  148. var bufferedReader: BufferedReader? = null
  149. var isr: InputStreamReader? = null
  150. try {
  151. isr = InputStreamReader(conf)
  152. } catch (e: Exception) {
  153. e.printStackTrace()
  154. }
  155. try {
  156. bufferedReader = BufferedReader(isr)
  157. val total = StringBuilder()
  158. var line: String?
  159. while (bufferedReader.readLine().also { line = it } != null) {
  160. total.append(line).append('\n')
  161. }
  162. return total.toString()
  163. } catch (e: Exception) {
  164. e.printStackTrace()
  165. }
  166. return ""
  167. }
  168. }