AccountScreenTV.kt 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. package com.vpn.fastestvpnservice.screensTV
  2. import android.app.Activity
  3. import android.content.Intent
  4. import android.os.Handler
  5. import android.os.Looper
  6. import android.util.Log
  7. import android.widget.Toast
  8. import androidx.activity.compose.BackHandler
  9. import androidx.compose.foundation.ExperimentalFoundationApi
  10. import androidx.compose.foundation.Image
  11. import androidx.compose.foundation.LocalOverscrollConfiguration
  12. import androidx.compose.foundation.background
  13. import androidx.compose.foundation.clickable
  14. import androidx.compose.foundation.focusable
  15. import androidx.compose.foundation.gestures.detectTapGestures
  16. import androidx.compose.foundation.layout.Arrangement
  17. import androidx.compose.foundation.layout.Box
  18. import androidx.compose.foundation.layout.BoxScope
  19. import androidx.compose.foundation.layout.Column
  20. import androidx.compose.foundation.layout.ColumnScope
  21. import androidx.compose.foundation.layout.Row
  22. import androidx.compose.foundation.layout.Spacer
  23. import androidx.compose.foundation.layout.fillMaxSize
  24. import androidx.compose.foundation.layout.fillMaxWidth
  25. import androidx.compose.foundation.layout.height
  26. import androidx.compose.foundation.layout.padding
  27. import androidx.compose.foundation.layout.size
  28. import androidx.compose.foundation.rememberScrollState
  29. import androidx.compose.foundation.shape.RoundedCornerShape
  30. import androidx.compose.foundation.verticalScroll
  31. import androidx.compose.material3.AlertDialog
  32. import androidx.compose.material3.Button
  33. import androidx.compose.material3.ButtonDefaults
  34. import androidx.compose.material3.CircularProgressIndicator
  35. import androidx.compose.material3.ExperimentalMaterial3Api
  36. import androidx.compose.material3.MaterialTheme
  37. import androidx.compose.material3.Surface
  38. import androidx.compose.material3.Text
  39. import androidx.compose.runtime.Composable
  40. import androidx.compose.runtime.CompositionLocalProvider
  41. import androidx.compose.runtime.LaunchedEffect
  42. import androidx.compose.runtime.getValue
  43. import androidx.compose.runtime.livedata.observeAsState
  44. import androidx.compose.runtime.mutableFloatStateOf
  45. import androidx.compose.runtime.mutableStateOf
  46. import androidx.compose.runtime.remember
  47. import androidx.compose.runtime.rememberCoroutineScope
  48. import androidx.compose.runtime.setValue
  49. import androidx.compose.ui.Alignment
  50. import androidx.compose.ui.Modifier
  51. import androidx.compose.ui.draw.alpha
  52. import androidx.compose.ui.draw.clip
  53. import androidx.compose.ui.focus.FocusRequester
  54. import androidx.compose.ui.focus.focusRequester
  55. import androidx.compose.ui.focus.onFocusChanged
  56. import androidx.compose.ui.graphics.Color
  57. import androidx.compose.ui.graphics.ColorFilter
  58. import androidx.compose.ui.graphics.painter.Painter
  59. import androidx.compose.ui.graphics.toArgb
  60. import androidx.compose.ui.input.key.Key
  61. import androidx.compose.ui.input.key.KeyEventType
  62. import androidx.compose.ui.input.key.key
  63. import androidx.compose.ui.input.key.onKeyEvent
  64. import androidx.compose.ui.input.key.type
  65. import androidx.compose.ui.input.pointer.pointerInput
  66. import androidx.compose.ui.platform.LocalContext
  67. import androidx.compose.ui.platform.LocalView
  68. import androidx.compose.ui.res.colorResource
  69. import androidx.compose.ui.res.painterResource
  70. import androidx.compose.ui.unit.TextUnit
  71. import androidx.compose.ui.unit.dp
  72. import androidx.compose.ui.unit.sp
  73. import androidx.compose.ui.window.DialogProperties
  74. import androidx.lifecycle.viewmodel.compose.viewModel
  75. import androidx.navigation.NavHostController
  76. import com.vpn.fastestvpnservice.R
  77. import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
  78. import com.vpn.fastestvpnservice.navigation.isAccountScreenPressed
  79. import com.vpn.fastestvpnservice.navigation.isFirstItemPressed
  80. import com.vpn.fastestvpnservice.navigation.isFourthItemFocused
  81. import com.vpn.fastestvpnservice.navigation.isFourthItemPressed
  82. import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.LogoutDialog
  83. import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.act
  84. import com.vpn.fastestvpnservice.sealedClass.Screen
  85. import com.vpn.fastestvpnservice.utils.VPNConnectionsUtil
  86. import com.vpn.fastestvpnservice.utils.isTablet
  87. import com.vpn.fastestvpnservice.viewmodels.AccountViewModel
  88. import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
  89. import com.vpn.fastestvpnservice.widgets.SimpleAppWidget
  90. import de.blinkt.openvpn.core.App
  91. import kotlinx.coroutines.delay
  92. @OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
  93. @Composable
  94. fun AccountTV(navHostController: NavHostController,
  95. settingsNavHostController: NavHostController)
  96. {
  97. var isLoggedOut by remember { mutableStateOf(false) }
  98. var isDelete by remember { mutableStateOf(false) }
  99. val context = LocalContext.current
  100. val basePreferenceHelper = BasePreferenceHelper(context)
  101. val accountViewModel: AccountViewModel = viewModel()
  102. val focusRequester1 = remember { FocusRequester() }
  103. BackHandler {
  104. // Toast.makeText(
  105. // context, "BackHandler Account TV - ${isFourthItemFocused.value}", Toast.LENGTH_SHORT
  106. // ).show()
  107. if (isFourthItemFocused.value) {
  108. navHostController.popBackStack()
  109. isFirstItemPressed.value = true
  110. // customNavigation(navHostController, BottomBarScreen.Home)
  111. } else {
  112. isFourthItemPressed.value = true
  113. }
  114. }
  115. CompositionLocalProvider(
  116. LocalOverscrollConfiguration provides null
  117. ) {
  118. Box(modifier = Modifier
  119. .background(colorResource(id = R.color.background_color_gray))
  120. .fillMaxSize()
  121. .padding(vertical = 10.dp)
  122. .padding(bottom = 0.dp)
  123. .verticalScroll(rememberScrollState())
  124. // contentAlignment = Alignment.Center
  125. ) {
  126. val view = LocalView.current
  127. val window = (view.context as Activity).window
  128. window.statusBarColor = Color.Transparent.toArgb()
  129. window.navigationBarColor = Color.Transparent.toArgb()
  130. if (isAccountScreenPressed.value) {
  131. LaunchedEffect(key1 = Unit) {
  132. focusRequester1.requestFocus()
  133. }
  134. isAccountScreenPressed.value = false
  135. }
  136. Column(
  137. verticalArrangement = Arrangement.Top,
  138. horizontalAlignment = Alignment.Start,
  139. modifier = Modifier
  140. .padding(start = 16.dp, end = 24.dp)
  141. .fillMaxSize()
  142. ) {
  143. Spacer(modifier = Modifier.height(50.dp))
  144. AddTextAccountTV(
  145. text = "Account",
  146. size = 28.sp,
  147. color = MaterialTheme.colorScheme.inversePrimary
  148. )
  149. // Spacer(modifier = Modifier.height(15.dp))
  150. // AddRowAccountTV("Email: ", basePreferenceHelper.getUser()?.userinfo?.email ?: "")
  151. // AddRowAccountTV("Product: ", basePreferenceHelper.getProduct()?.productName ?: "")
  152. // AddRowAccountTV("Account Status: ", basePreferenceHelper.getProduct()?.status ?: "")
  153. // Surface(
  154. // modifier = Modifier
  155. // .padding(top = 23.5.dp, bottom = 0.dp)
  156. // .height(1.dp)
  157. // .fillMaxWidth(),
  158. // color = colorResource(id = R.color.gray_icon)
  159. // ) {}
  160. Spacer(modifier = Modifier.height(22.dp))
  161. AddRowAccountIconTV(
  162. icon = painterResource(id = R.drawable.subscription3x),
  163. text = "Upgrade Subscription",
  164. onClick = {
  165. navHostController.navigate(
  166. Screen.Subscription.route
  167. )
  168. },
  169. focusRequester1
  170. )
  171. AddRowAccountIconTV(
  172. icon = painterResource(id = R.drawable.fav3x),
  173. text = "Favorite Servers",
  174. onClick = {
  175. navHostController.navigate(
  176. Screen.FavoriteServers.route
  177. )
  178. }
  179. )
  180. AddRowAccountIconTV(
  181. icon = painterResource(id = R.drawable.lock3x),
  182. text = "Change Password",
  183. onClick = {
  184. navHostController.navigate(
  185. Screen.ChangePassword.route
  186. )
  187. }
  188. )
  189. AddRowAccountIconTV(
  190. icon = painterResource(id = R.drawable.delete3x),
  191. text = "Delete Account",
  192. onClick = {
  193. isDelete = true
  194. Log.d("islogoutClicked?", "isDelete Yes")
  195. }
  196. )
  197. AddRowAccountIconTV(
  198. icon = painterResource(id = R.drawable.logout3x),
  199. text = "Logout",
  200. onClick = {
  201. isLoggedOut = true
  202. Log.d("islogoutClicked?", "Yes")
  203. },
  204. isLastRow = true
  205. )
  206. }
  207. if (isLoggedOut) {
  208. Log.d("islogoutClicked", "isLoggedOut$isLoggedOut")
  209. AlertDialog(
  210. onDismissRequest = { isLoggedOut = false },
  211. properties = DialogProperties(),
  212. modifier = Modifier
  213. .fillMaxWidth()
  214. .height(228.dp)
  215. ) {
  216. LogoutDialog("Logout Account",
  217. "Are you sure to logout the account?",
  218. onCancel = {
  219. isLoggedOut = false
  220. },
  221. settingsNavHostController,
  222. isLoggedOut,
  223. isDelete,
  224. basePreferenceHelper,
  225. accountViewModel
  226. )
  227. }
  228. }
  229. if (isDelete) {
  230. Log.d("islogoutClicked", "isDelete$isDelete")
  231. AlertDialog(
  232. onDismissRequest = { isDelete = false },
  233. properties = DialogProperties(),
  234. modifier = Modifier
  235. .fillMaxWidth()
  236. .height(228.dp)
  237. ) {
  238. LogoutDialog("Delete Account",
  239. "Are you sure to delete the account?",
  240. onCancel = { isDelete = false },
  241. settingsNavHostController,
  242. isLoggedOut,
  243. isDelete,
  244. basePreferenceHelper,
  245. accountViewModel
  246. )
  247. }
  248. }
  249. if (accountViewModel.liveDataLogoutStatus.value == true) {
  250. var progress by remember { mutableFloatStateOf(0.1F) }
  251. LaunchedEffect(key1 = Unit) {
  252. for (i in 1..100) {
  253. progress = i.toFloat()/100F
  254. delay(100)
  255. }
  256. }
  257. CircularProgressIndicator(
  258. progress = { progress },
  259. modifier = Modifier
  260. .align(Alignment.Center)
  261. .size(50.dp),
  262. color = colorResource(id = R.color.yellow_text),
  263. strokeWidth = 5.dp,
  264. )
  265. }
  266. val logoutResponse = accountViewModel.liveDataLogout.observeAsState().value
  267. logoutResponse?.let {
  268. Log.d("test_button_log", "logout api response")
  269. accountViewModel.setLogoutStatus(false)
  270. if (it) {
  271. Log.d("test_api_response","Logout live: $logoutResponse")
  272. basePreferenceHelper.setLoggedInState(false)
  273. basePreferenceHelper.clearAllData()
  274. settingsNavHostController.popBackStack()
  275. settingsNavHostController.navigate(Screen.Started.route)
  276. val widgetIntent = Intent(context, SimpleAppWidget::class.java)
  277. widgetIntent.action = SimpleAppWidget.ACTION_LOGOUT
  278. context.sendBroadcast(widgetIntent)
  279. }
  280. else {
  281. Log.d("test_api_response","Logout false: $logoutResponse")
  282. accountViewModel.mutableLiveDataLogoutStatus.value = false
  283. Toast.makeText(context, logoutResponse.toString(), Toast.LENGTH_SHORT).show()
  284. }
  285. accountViewModel.mutableLiveDataLogout.value = null
  286. }
  287. val deleteResponse = accountViewModel.liveDataDelete.observeAsState().value
  288. deleteResponse?.let {
  289. accountViewModel.setLogoutStatus(false)
  290. if (it.status) {
  291. Log.d("test_api_response","Delete live: ${deleteResponse.status}")
  292. basePreferenceHelper.setLoggedInState(false)
  293. basePreferenceHelper.clearAllData()
  294. settingsNavHostController.popBackStack()
  295. settingsNavHostController.navigate(Screen.Started.route)
  296. }
  297. else {
  298. Log.d("test_api_response","Delete false: ${deleteResponse.status}")
  299. accountViewModel.mutableLiveDataDeleteStatus.value = false
  300. Toast.makeText(context, deleteResponse.status.toString(), Toast.LENGTH_SHORT).show()
  301. }
  302. accountViewModel.mutableLiveDataDelete.value = null
  303. }
  304. }
  305. }
  306. }
  307. @Composable
  308. fun ColumnScope.AddTextAccountTV(text: String, size: TextUnit, color: Color) {
  309. Text(
  310. text = text,
  311. color = color,
  312. style = MaterialTheme.typography.headlineLarge
  313. )
  314. }
  315. @Composable
  316. fun ColumnScope.AddRowAccountTV(title: String, subTitle: String) {
  317. // val configuration = LocalConfiguration.current
  318. // val isTablet = configuration.screenWidthDp > 840
  319. Row(
  320. modifier = Modifier
  321. .fillMaxWidth()
  322. .padding(top = 16.dp)
  323. .background(Color.Transparent)
  324. .height(if (isTablet()) 20.dp else 18.dp),
  325. horizontalArrangement = Arrangement.SpaceBetween,
  326. verticalAlignment = Alignment.CenterVertically
  327. ) {
  328. Surface(
  329. modifier = Modifier
  330. .padding(start = 0.dp)
  331. .align(Alignment.CenterVertically),
  332. color = Color.Transparent
  333. ) {
  334. Text(text = title,
  335. color = MaterialTheme.colorScheme.inversePrimary,
  336. style = MaterialTheme.typography.bodyLarge.copy(
  337. fontSize = if (isTablet()) 15.sp else 14.sp
  338. ),
  339. maxLines = 1,
  340. modifier = Modifier
  341. .padding(start = 10.dp, end = 0.dp)
  342. .weight(1f)
  343. )
  344. }
  345. // Spacer(modifier = Modifier.weight(1f))
  346. Surface(
  347. modifier = Modifier
  348. .padding(start = 0.dp)
  349. .align(Alignment.CenterVertically),
  350. color = Color.Transparent
  351. ) {
  352. Text(text = subTitle,
  353. color = MaterialTheme.colorScheme.inversePrimary,
  354. style = MaterialTheme.typography.bodySmall.copy(
  355. fontSize = if (isTablet()) 16.sp else 14.sp
  356. ),
  357. maxLines = 1,
  358. modifier = Modifier
  359. .padding(start = 0.dp, end = 0.dp)
  360. .weight(1f)
  361. .alpha(0.6F)
  362. )
  363. }
  364. }
  365. }
  366. @Composable
  367. fun ColumnScope.AddRowAccountIconFirstTV(
  368. icon: Painter,
  369. text: String,
  370. onClick : () -> Unit
  371. ) {
  372. Row(
  373. modifier = Modifier
  374. .fillMaxWidth()
  375. .padding(top = 0.dp)
  376. .clip(RoundedCornerShape(4.dp))
  377. .background(Color.White)
  378. .height(61.dp)
  379. .pointerInput(Unit) {
  380. detectTapGestures {
  381. onClick()
  382. }
  383. },
  384. horizontalArrangement = Arrangement.Start,
  385. verticalAlignment = Alignment.CenterVertically
  386. ) {
  387. Surface(
  388. modifier = Modifier.padding(start = 20.dp),
  389. color = Color.Transparent
  390. ) {
  391. Image(
  392. painter = icon,
  393. contentDescription = "World",
  394. modifier = Modifier
  395. .padding(start = 0.dp)
  396. .size(24.dp)
  397. .weight(1f),
  398. colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.inversePrimary)
  399. )
  400. }
  401. Surface(
  402. modifier = Modifier.padding(start = 0.dp),
  403. color = Color.Transparent
  404. ) {
  405. Text(text = text,
  406. color = MaterialTheme.colorScheme.inversePrimary,
  407. style = MaterialTheme.typography.titleSmall,
  408. maxLines = 2,
  409. modifier = Modifier
  410. .padding(start = 18.dp, end = 0.dp)
  411. .weight(1f)
  412. )
  413. }
  414. Spacer(modifier = Modifier.weight(1f))
  415. Surface(
  416. modifier = Modifier
  417. .padding(end = 20.dp)
  418. .align(Alignment.CenterVertically),
  419. color = Color.Transparent
  420. ) {
  421. Image(
  422. painter = painterResource(id = R.drawable.frontarrow3x),
  423. contentDescription = "Front_Arrow",
  424. modifier = Modifier
  425. .padding(start = 0.dp, end = 3.dp)
  426. .size(10.dp, 18.dp)
  427. .weight(1f),
  428. colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.inversePrimary)
  429. )
  430. }
  431. }
  432. }
  433. @Composable
  434. fun ColumnScope.AddRowAccountIconTV(
  435. icon: Painter,
  436. text: String,
  437. onClick : () -> Unit,
  438. focusRequester1: FocusRequester = FocusRequester(),
  439. isLastRow: Boolean = false
  440. ) {
  441. var isRowFocused by remember { mutableStateOf(false) }
  442. val context = LocalContext.current
  443. Row(
  444. modifier = Modifier
  445. .fillMaxWidth()
  446. .padding(top = 5.dp)
  447. .background(if (isRowFocused) Color.LightGray else Color.White,
  448. shape = RoundedCornerShape(4.dp))
  449. .height(61.dp)
  450. .onKeyEvent {
  451. if (isLastRow) {
  452. if (it.type == KeyEventType.KeyDown && it.key == Key.DirectionDown) {
  453. // Toast
  454. // .makeText(
  455. // context, "KeyDown & DirectionDown Email", Toast.LENGTH_SHORT
  456. // )
  457. // .show()
  458. // customNavigation(navHostController, BottomBarScreen.Help)
  459. isFourthItemPressed.value = true
  460. true
  461. }
  462. else if (it.type == KeyEventType.KeyUp && it.key == Key.DirectionUp) {
  463. // Toast
  464. // .makeText(
  465. // context, "KeyUp & DirectionUp Email", Toast.LENGTH_SHORT
  466. // )
  467. // .show()
  468. false
  469. }
  470. else {
  471. false
  472. }
  473. } else { false }
  474. }
  475. .focusRequester(focusRequester1)
  476. .onFocusChanged {
  477. isRowFocused = it.isFocused
  478. }
  479. .focusable()
  480. .clickable {
  481. // Toast.makeText(
  482. // context, text, Toast.LENGTH_SHORT
  483. // ).show()
  484. }
  485. // .border(
  486. // 1.dp, Color.Blue, RoundedCornerShape(40.dp)
  487. // )
  488. // .clip(RoundedCornerShape(40.dp))
  489. // .pointerInput(Unit) {
  490. // detectTapGestures {
  491. // onClick()
  492. // }
  493. // }
  494. ,
  495. horizontalArrangement = Arrangement.Start,
  496. verticalAlignment = Alignment.CenterVertically
  497. ) {
  498. Surface(
  499. modifier = Modifier.padding(start = 20.dp),
  500. color = Color.Transparent
  501. ) {
  502. Image(
  503. painter = icon,
  504. contentDescription = "World",
  505. modifier = Modifier
  506. .padding(start = 0.dp)
  507. .size(24.dp)
  508. .weight(1f),
  509. colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.inversePrimary)
  510. )
  511. }
  512. Surface(
  513. modifier = Modifier.padding(start = 0.dp),
  514. color = Color.Transparent
  515. ) {
  516. Text(text = text,
  517. color = MaterialTheme.colorScheme.inversePrimary,
  518. style = MaterialTheme.typography.titleSmall,
  519. maxLines = 2,
  520. modifier = Modifier
  521. .padding(start = 18.dp, end = 0.dp)
  522. .weight(1f)
  523. )
  524. }
  525. Spacer(modifier = Modifier.weight(1f))
  526. Surface(
  527. modifier = Modifier
  528. .padding(end = 20.dp)
  529. .align(Alignment.CenterVertically),
  530. color = Color.Transparent
  531. ) {
  532. Image(
  533. painter = painterResource(id = R.drawable.frontarrow3x),
  534. contentDescription = "Front_Arrow",
  535. modifier = Modifier
  536. .padding(start = 0.dp, end = 3.dp)
  537. .size(10.dp, 18.dp)
  538. .weight(1f),
  539. colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.inversePrimary)
  540. )
  541. }
  542. }
  543. }
  544. @Composable
  545. fun BoxScope.LogoutDialogTV(
  546. title: String,
  547. desc: String,
  548. onCancel : () -> Unit,
  549. settingsNavHostController: NavHostController,
  550. isLogout: Boolean,
  551. isDelete: Boolean,
  552. basePreferenceHelper: BasePreferenceHelper,
  553. accountViewModel: AccountViewModel
  554. ) {
  555. val context = LocalContext.current
  556. val scope = rememberCoroutineScope()
  557. val homeViewModel: HomeViewModel = viewModel {
  558. HomeViewModel(context, scope)
  559. }
  560. Surface(
  561. color = colorResource(id = R.color.white),
  562. modifier = Modifier
  563. .background(Color.Transparent)
  564. .fillMaxWidth()
  565. ,
  566. shape = RoundedCornerShape(18.dp)
  567. ) {
  568. Column(
  569. verticalArrangement = Arrangement.Top,
  570. horizontalAlignment = Alignment.CenterHorizontally,
  571. modifier = Modifier
  572. .background(MaterialTheme.colorScheme.onBackground)
  573. ) {
  574. Log.d("islogoutClicked", "AlertDialog")
  575. Text(text = title,
  576. color = MaterialTheme.colorScheme.inversePrimary,
  577. style = MaterialTheme.typography.bodyMedium,
  578. modifier = Modifier.padding(top = 45.dp)
  579. )
  580. Text(text = desc,
  581. color = MaterialTheme.colorScheme.inversePrimary,
  582. style = MaterialTheme.typography.labelSmall,
  583. maxLines = 2,
  584. modifier = Modifier.padding(top = 26.dp)
  585. )
  586. Row (
  587. modifier = Modifier
  588. .padding(top = 34.dp),
  589. horizontalArrangement = Arrangement.SpaceBetween,
  590. verticalAlignment = Alignment.Bottom
  591. ) {
  592. Button(
  593. onClick = {
  594. Log.d("test_button", "No")
  595. onCancel()
  596. // navHostController.popBackStack()
  597. // navHostController.navigate(Screen.Login.route)
  598. },
  599. modifier = Modifier
  600. .padding(
  601. start = 15.dp, end = 5.dp,
  602. bottom = 0.dp, top = 0.dp
  603. )
  604. .background(colorResource(id = R.color.transparent))
  605. .weight(1F)
  606. .height(52.dp),
  607. shape = RoundedCornerShape(15.dp),
  608. colors = ButtonDefaults.buttonColors(
  609. contentColor = colorResource(id = R.color.white),
  610. containerColor = colorResource(id = R.color.light_blue),
  611. ),
  612. )
  613. {
  614. Text(text = "No",
  615. style = MaterialTheme.typography.labelLarge)
  616. Log.d("test_button", "RowScope")
  617. }
  618. Button(
  619. onClick = {
  620. Log.d("test_button", "Logout Yes")
  621. if (isLogout) {
  622. Log.d("test_api_response","Logout click = $isLogout")
  623. val connectState = homeViewModel.isConnect.value
  624. if (connectState == App.CONNECTED || connectState == App.CONNECTING) {
  625. Log.d("test_button_log", "connectState = $connectState, act = $act")
  626. Handler(Looper.getMainLooper()).postDelayed({
  627. val wg = VPNConnectionsUtil(context, act ,homeViewModel)
  628. wg.stopVpn()
  629. }, 400)
  630. }
  631. Log.d("test_button_log", "logout api")
  632. accountViewModel.setLogoutStatus(true)
  633. accountViewModel.logout()
  634. onCancel()
  635. }
  636. if (isDelete) {
  637. Log.d("test_api_response","Delete click = $isDelete")
  638. accountViewModel.setLogoutStatus(true)
  639. accountViewModel.deleteAccount()
  640. onCancel()
  641. }
  642. },
  643. modifier = Modifier
  644. .padding(
  645. start = 5.dp, end = 15.dp,
  646. bottom = 0.dp, top = 0.dp
  647. )
  648. .background(colorResource(id = R.color.transparent))
  649. .weight(1F)
  650. .height(52.dp),
  651. shape = RoundedCornerShape(15.dp),
  652. colors = ButtonDefaults.buttonColors(
  653. contentColor = colorResource(id = R.color.white),
  654. containerColor = colorResource(id = R.color.red),
  655. ),
  656. // border = BorderStroke(2.dp,
  657. // colorResource(id = R.color.gray_icon))
  658. )
  659. {
  660. Text(text = "Yes",
  661. style = MaterialTheme.typography.labelLarge)
  662. Log.d("test_button", "RowScope")
  663. // val logoutResponse = accountViewModel.liveDataLogout.observeAsState().value
  664. // if (logoutResponse == true) {
  665. // accountViewModel.setLogoutStatus(false)
  666. // Log.d("test_api_response","Logout live: $logoutResponse")
  667. // basePreferenceHelper.setLoggedInState(false)
  668. // settingsNavHostController.popBackStack()
  669. // settingsNavHostController.navigate(Screen.Started.route)
  670. // }
  671. // else {
  672. //// accountViewModel.setLogoutStatus(false)
  673. //// onCancel()
  674. // }
  675. }
  676. }
  677. }
  678. }
  679. }