MainActivity.kt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package com.vpn.fastestvpnservice
  2. import android.content.Context
  3. import android.content.Intent
  4. import android.content.pm.ActivityInfo
  5. import android.content.pm.PackageManager
  6. import android.net.Uri
  7. import android.os.Build
  8. import android.os.Bundle
  9. import android.util.Log
  10. import android.view.WindowInsets
  11. import android.view.WindowInsetsController
  12. import android.view.WindowManager
  13. import androidx.activity.compose.setContent
  14. import androidx.activity.viewModels
  15. import androidx.compose.foundation.isSystemInDarkTheme
  16. import androidx.compose.runtime.getValue
  17. import androidx.compose.runtime.mutableStateOf
  18. import androidx.compose.runtime.remember
  19. import androidx.compose.ui.graphics.toArgb
  20. import androidx.compose.ui.platform.LocalContext
  21. import androidx.compose.ui.res.colorResource
  22. import androidx.core.app.ActivityCompat
  23. import androidx.core.view.WindowCompat
  24. import androidx.fragment.app.FragmentManager
  25. import androidx.navigation.compose.rememberNavController
  26. import com.vpn.fastestvpnservice.activities.DockActivity
  27. import com.vpn.fastestvpnservice.activities.SplashActivity
  28. import com.vpn.fastestvpnservice.activities.SplashActivity2
  29. import com.vpn.fastestvpnservice.beans.isDarkTheme
  30. import com.vpn.fastestvpnservice.beans.themesList
  31. import com.vpn.fastestvpnservice.broadcasts.ConnectivityReceiver
  32. import com.vpn.fastestvpnservice.constants.AppEnum
  33. import com.vpn.fastestvpnservice.fragments.LoginFragment
  34. import com.vpn.fastestvpnservice.fragments.TvHomeFragment
  35. import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
  36. import com.vpn.fastestvpnservice.interfaces.CallBacks
  37. import com.vpn.fastestvpnservice.interfaces.OnBackPressedOnTV
  38. import com.vpn.fastestvpnservice.interfaces.UpdateServersOnProtocol
  39. import com.vpn.fastestvpnservice.interfaces.VPNConnectionCallBacks
  40. import com.vpn.fastestvpnservice.navigation.SetUpNavGraph
  41. import com.vpn.fastestvpnservice.screens.helpScreensAll.fileChooserCallback
  42. import com.vpn.fastestvpnservice.ui.theme.FastestVPNTheme
  43. import com.vpn.fastestvpnservice.utils.StaticMethods
  44. import com.vpn.fastestvpnservice.viewmodels.LoginViewModel
  45. import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
  46. import de.blinkt.openvpn.core.App
  47. open class MainActivity : DockActivity(), ConnectivityReceiver.ConnectivityReceiverListener {
  48. val loginViewModel: LoginViewModel by viewModels()
  49. override fun onCreate(savedInstanceState: Bundle?) {
  50. super.onCreate(savedInstanceState)
  51. requestedOrientation = if (App.isAndroidTvBox) {
  52. /* This for Android-TV,Box APK */
  53. ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
  54. } else {
  55. /* This for Normal APK */
  56. if (StaticMethods.isTV(this)) {
  57. ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
  58. } else {
  59. ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
  60. }
  61. }
  62. // setContentView(R.layout.activity_main)
  63. val basePreferenceHelper = BasePreferenceHelper(baseContext)
  64. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
  65. if (ActivityCompat.checkSelfPermission(
  66. this,
  67. android.Manifest.permission.POST_NOTIFICATIONS
  68. ) != PackageManager.PERMISSION_GRANTED
  69. ) {
  70. requestPermissions(arrayOf(android.Manifest.permission.POST_NOTIFICATIONS), 1);
  71. }
  72. }
  73. WindowCompat.setDecorFitsSystemWindows(window, false)
  74. setContent {
  75. val context = LocalContext.current
  76. // val basePreferenceHelper = BasePreferenceHelper(context)
  77. val selectedTheme = basePreferenceHelper.getTheme()
  78. val isSystemInDarkTheme = isSystemInDarkTheme()
  79. val systemTheme by remember { mutableStateOf(isSystemInDarkTheme) }
  80. if (selectedTheme == themesList[0])
  81. {
  82. isDarkTheme.value = systemTheme
  83. }
  84. else {
  85. isDarkTheme.value = selectedTheme == themesList[2]
  86. }
  87. if (StaticMethods.isTV(baseContext)) {
  88. Log.d("test_platform_android", "TV")
  89. val intent = Intent(context, SplashActivity::class.java)
  90. context.startActivity(intent)
  91. finish()
  92. } else {
  93. Log.d("test_platform_android", "Mobile")
  94. FastestVPNTheme(isDarkTheme.value) {
  95. window.statusBarColor = colorResource(id = R.color.blue_text).toArgb()
  96. val navController = rememberNavController()
  97. SetUpNavGraph(navHostController = navController, this)
  98. }
  99. }
  100. }
  101. // hideSystemUI()
  102. // val bundle = intent.extras
  103. // bundle.let {
  104. // it?.getString(AppEnum.SCREEN_NAME.key).let {
  105. // it?.let {
  106. // Log.d("test_nav_tv", "bundle $it")
  107. // initFragment(it)
  108. // }
  109. // }
  110. // ?: kotlin.run {
  111. // basePreferenceHelper?.getUser()?.let {
  112. // Log.d("test_nav_tv", "kotlin.run")
  113. // initFragment(AppEnum.HOME_SCREEN.key)
  114. // }
  115. // }
  116. // }
  117. FragmentManager.enableDebugLogging(true)
  118. }
  119. fun hideSystemUI() {
  120. //Hides the ugly action bar at the top
  121. actionBar?.hide()
  122. //Hide the status bars
  123. WindowCompat.setDecorFitsSystemWindows(window, false)
  124. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
  125. window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
  126. } else {
  127. window.insetsController?.apply {
  128. hide(WindowInsets.Type.statusBars())
  129. systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
  130. }
  131. }
  132. }
  133. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
  134. super.onActivityResult(requestCode, resultCode, data)
  135. Log.d("test_file_chat", "onActivityResult: $requestCode $resultCode $data")
  136. if (requestCode == 0) {
  137. Log.d("test_file_chat", "onActivityResult: ${fileChooserCallback.toString()}")
  138. fileChooserCallback?.onReceiveValue(null)
  139. } else {
  140. fileChooserCallback?.onReceiveValue(arrayOf(Uri.parse(data?.dataString)))
  141. }
  142. fileChooserCallback = null
  143. }
  144. override fun getContainerId(): Int {
  145. return R.id.mainFrameLayout
  146. }
  147. // override fun getContainerId(): Int {
  148. // return 0
  149. // }
  150. override fun onDestroy() {
  151. super.onDestroy()
  152. val basePreferenceHelper = BasePreferenceHelper(baseContext)
  153. if (!StaticMethods.isTV(this)) {
  154. basePreferenceHelper.clearServerObject()
  155. }
  156. Log.d("test_conn_ser_obj", "onDestroy() called")
  157. }
  158. fun getCallingIntent(_context: Context?): Intent {
  159. return Intent(_context, MainActivity::class.java)
  160. }
  161. fun initFragment(key: String) {
  162. Log.d("test_nav_tv", "initFragment() => $key")
  163. // val fragmentNavigator: FragmentNavigator = FragmentNavigator()
  164. when (key) {
  165. AppEnum.LOGIN_SCREEN.key -> {
  166. // val i = Intent(this, SplashActivity2::class.java)
  167. // startActivity(i)
  168. fragmentNavigator.replaceFragmentWithBackStack(LoginFragment.newInstance())
  169. }
  170. AppEnum.HOME_SCREEN.key -> {
  171. // fragmentNavigator.clearAllFragments()
  172. if (App.isAndroidTvBox)
  173. {
  174. /* Android-TV,Box APK */
  175. fragmentNavigator.replaceFragmentWithBackStackTv(TvHomeFragment.newInstance(), "tv_home")
  176. }
  177. else {
  178. /* Normal APK*/
  179. if (StaticMethods.isTV(this)) {
  180. Log.d("test_nav_tv", "isTV =>")
  181. val i = Intent(this, SplashActivity2::class.java)
  182. startActivity(i)
  183. // fragmentNavigator.replaceFragmentWithBackStackTv(TvHomeFragment.newInstance(), "tv_home")
  184. } else {
  185. fragmentNavigator.replaceFragmentWithBackStack(TvHomeFragment.newInstance())
  186. }
  187. }
  188. }
  189. // AppEnum.SIGNUP_SCREEN.key -> {
  190. // fragmentNavigator.replaceFragment(SignUpFragment.newInstance())
  191. // }
  192. AppEnum.HELP_SCREEN.key -> {
  193. // fragmentNavigator.replaceFragment(
  194. // WebViewFragment.newInstance(
  195. // AppConstant.FAQ_WEBVIEW_URL, getString(R.string.help_faq)
  196. // )
  197. // )
  198. }
  199. }
  200. }
  201. companion object {
  202. var isWGDown: Boolean = true
  203. var isAutoEnabled: Boolean = false
  204. var isSnrNotify: Boolean = false
  205. var isSelectedServersShown: Boolean = false
  206. var vpnConnectionCallBacks: VPNConnectionCallBacks? = null
  207. var isStopSubscriptionNavigation: Boolean = true
  208. var updateServersOnProtocol: UpdateServersOnProtocol? = null
  209. var callBacks: CallBacks? = null
  210. var onBackPressedOnTV: OnBackPressedOnTV? = null
  211. }
  212. override fun onNetworkConnectionChanged(isConnected: Boolean) {
  213. }
  214. // override fun onBackPressed() {
  215. // super.onBackPressed()
  216. //
  217. // if (StaticMethods.isTV(this))
  218. // {
  219. // Log.d("test_backTV", "TV Back!!")
  220. //// this@MainActivity.finishAffinity()
  221. // }
  222. // }
  223. }
  224. // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) // commenting now...
  225. // {
  226. // ActivityCompat.requestPermissions(this,
  227. // arrayOf(
  228. // android.Manifest.permission.ACCESS_FINE_LOCATION,
  229. // android.Manifest.permission.ACCESS_COARSE_LOCATION
  230. // ),
  231. // PackageManager.PERMISSION_GRANTED
  232. // )
  233. // }
  234. // else {
  235. // ActivityCompat.requestPermissions(this,
  236. // arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION,
  237. // android.Manifest.permission.ACCESS_COARSE_LOCATION
  238. // ),
  239. // PackageManager.PERMISSION_GRANTED
  240. // )
  241. // }