瀏覽代碼

widgets --- set logout, login receiver, Update UI[background color, button etc]...

Khubaib 1 年之前
父節點
當前提交
03e9f090ac

+ 7 - 1
app/src/main/java/com/vpn/fastestvpnservice/screens/LoginScreen.kt

@@ -1,6 +1,7 @@
 package com.vpn.fastestvpnservice.screens
 
 
+import android.content.Intent
 import android.content.res.Configuration
 import android.gesture.Gesture
 import android.location.Location
@@ -124,6 +125,7 @@ import com.vpn.fastestvpnservice.ui.theme.outfitFontFamily
 import com.vpn.fastestvpnservice.viewmodels.LoginViewModel
 import com.vpn.fastestvpnservice.views.CustomValidation
 import com.vpn.fastestvpnservice.views.ShowCustomSnackBar
+import com.vpn.fastestvpnservice.widgets.SimpleAppWidget
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 import kotlin.coroutines.coroutineContext
@@ -620,7 +622,7 @@ fun BoxScope.SignInButton(
             style = MaterialTheme.typography.titleMedium,
             textAlign = TextAlign.Center
         )
-
+        val context = LocalContext.current
         val loginData by loginViewModel.liveDataUserResponse.observeAsState()
         loginData?.let { response ->
 //            Log.d("test_api_response live", "live: ${loginData?.status} ${loginData?.message}")
@@ -708,6 +710,10 @@ fun BoxScope.SignInButton(
 
                     }
 
+                    val widgetIntent = Intent(context, SimpleAppWidget::class.java)
+                    widgetIntent.action = SimpleAppWidget.ACTION_LOGIN
+                    context.sendBroadcast(widgetIntent)
+
                     navHostController.popBackStack()
                     navHostController.navigate(Screen.BottomBarMainScreen.route)
                 }

+ 6 - 0
app/src/main/java/com/vpn/fastestvpnservice/screens/SignUpScreen.kt

@@ -1,5 +1,6 @@
 package com.vpn.fastestvpnservice.screens
 
+import android.content.Intent
 import android.content.res.Configuration
 import android.location.Location
 import android.util.Log
@@ -102,6 +103,7 @@ import com.vpn.fastestvpnservice.viewmodels.LoginViewModel
 import com.vpn.fastestvpnservice.viewmodels.SignUpViewModel
 import com.vpn.fastestvpnservice.views.CustomValidation
 import com.vpn.fastestvpnservice.views.ShowCustomSnackBar
+import com.vpn.fastestvpnservice.widgets.SimpleAppWidget
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 
@@ -783,6 +785,10 @@ fun BoxScope.SignUpButton(
 
                 }
 
+                val widgetIntent = Intent(context, SimpleAppWidget::class.java)
+                widgetIntent.action = SimpleAppWidget.ACTION_LOGIN
+                context.sendBroadcast(widgetIntent)
+
                 navHostController.popBackStack()
                 navHostController.navigate(Screen.BottomBarMainScreen.route)
             }

+ 2 - 1
app/src/main/java/com/vpn/fastestvpnservice/screens/SplashScreen.kt

@@ -176,10 +176,11 @@ fun Splash(navHostController: NavHostController) {
 
 //        serverListViewModel.filterServersAllCategoryPing(serverData)
     }
+    val delay: Long = if (isLoggedIn) 1000 else 2000
 
     LaunchedEffect(key1 = true) {
         splashViewModel.serverDataApi()
-        delay(3000)
+        delay(delay)
 
         if (isLoggedIn) {
             navHostController.popBackStack()

+ 6 - 0
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/AccountScreen.kt

@@ -1,5 +1,6 @@
 package com.vpn.fastestvpnservice.screens.bottomNavBarScreens
 
+import android.content.Intent
 import android.content.res.Configuration
 import android.os.Handler
 import android.os.Looper
@@ -68,6 +69,7 @@ import com.vpn.fastestvpnservice.sealedClass.Screen
 import com.vpn.fastestvpnservice.utils.VPNConnectionsUtil
 import com.vpn.fastestvpnservice.viewmodels.AccountViewModel
 import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
+import com.vpn.fastestvpnservice.widgets.SimpleAppWidget
 import de.blinkt.openvpn.core.App
 import kotlinx.coroutines.delay
 
@@ -239,6 +241,10 @@ fun Account(navHostController: NavHostController,
                 basePreferenceHelper.clearAllData()
                 settingsNavHostController.popBackStack()
                 settingsNavHostController.navigate(Screen.Started.route)
+
+                val widgetIntent = Intent(context, SimpleAppWidget::class.java)
+                widgetIntent.action = SimpleAppWidget.ACTION_LOGOUT
+                context.sendBroadcast(widgetIntent)
             }
             else {
                 Log.d("test_api_response","Logout false: $logoutResponse")

+ 14 - 19
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/HomeScreen.kt

@@ -2,6 +2,7 @@ package com.vpn.fastestvpnservice.screens.bottomNavBarScreens
 
 import android.appwidget.AppWidgetProvider
 import android.content.Context
+import android.content.Intent
 import android.content.res.Configuration
 import android.location.Location
 import android.os.Handler
@@ -118,6 +119,7 @@ import com.vpn.fastestvpnservice.utils.VPNConnectionsUtil
 import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
 import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
 import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
+import com.vpn.fastestvpnservice.widgets.SimpleAppWidget
 import com.wireguard.android.backend.GoBackend
 import kotlinx.coroutines.CoroutineScope
 
@@ -291,33 +293,18 @@ fun Home(navHostController: NavHostController, activity: ComponentActivity) {
                         filterServerByConnectionCount = it
                     }
                 } else {
-//                    prefHelper.getServerData().get(0).servers?.let {
-//
-//                        val temp = it.filter { server ->
-//                            server.protocol.equals(prefHelper.getProtocol().title, ignoreCase = true)
-//                        }
-//
-//                        if (temp.isNotEmpty()) {
-//                            filterServerByConnectionCount = serverListViewModel.filterServerByConnectionCount(
-//                                it
-//                            )
-//                        }
-//                    }
                     val smartServer = basePreferenceHelper.getSmartServerObject()
                     smartServer?.let {
                         Log.d("test_smart_server_n", "server = ${it.server_name}")
                         filterServerByConnectionCount = it
                     }
                 }
-                prefHelper.setServerObject(filterServerByConnectionCount)
 
-//                val data = prefHelper.getServerData()
-//                data.get(0).servers?.let {
-//                    serverListViewModel.filterServersByISO(
-//                        it
-//                    )
-//                }
+                prefHelper.setServerObject(filterServerByConnectionCount)
 
+                val widgetIntent = Intent(context, SimpleAppWidget::class.java)
+                widgetIntent.action = SimpleAppWidget.ACTION_CHANGE_SERVER
+                context.sendBroadcast(widgetIntent)
 
                 server = filterServerByConnectionCount
 
@@ -333,6 +320,10 @@ fun Home(navHostController: NavHostController, activity: ComponentActivity) {
                 Log.d("test_home_resume", "ON_PAUSE: Home Screen!")
                 vpnConnectionsUtil.onPauseCallBack()
 
+                val widgetIntent = Intent(context, SimpleAppWidget::class.java)
+                widgetIntent.action = SimpleAppWidget.ACTION_CHANGE_SERVER
+                context.sendBroadcast(widgetIntent)
+
             }
             Lifecycle.Event.ON_STOP -> {
                 Log.d("test_home_resume", "ON_STOP: Home Screen!")
@@ -440,6 +431,10 @@ fun Home(navHostController: NavHostController, activity: ComponentActivity) {
                             Log.d("isConnect_State_vpn", "startVPN")
                             vpnConnectionsUtil.startVpn()
                         }
+
+                        val widgetIntent = Intent(context, SimpleAppWidget::class.java)
+                        widgetIntent.action = SimpleAppWidget.ACTION_CHANGE_SERVER
+                        context.sendBroadcast(widgetIntent)
                     }
                 }
 

+ 18 - 8
app/src/main/java/com/vpn/fastestvpnservice/widgets/SimpleAppWidget.kt

@@ -84,6 +84,8 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
 
             views.setViewVisibility(R.id.fl_ivLogo, View.VISIBLE)
             views.setViewVisibility(R.id.fl_ivCountry, View.VISIBLE)
+            views.setViewVisibility(R.id.fl_ivConnect, View.VISIBLE)
+
 
             var image: Int = 0
             if (connectState == App.CONNECTED)
@@ -92,7 +94,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
                 views.setTextViewText(R.id.tvServerIP, serverObj?.ip.toString())
                 image = getDrawable(context, serverObj?.iso)
                 views.setImageViewResource(R.id.ivLogo, R.drawable.logo_spark_connected)
-                views.setImageViewResource(R.id.ivConnect, R.drawable.ic_connect_widget_y)
+                views.setImageViewResource(R.id.ivConnect, R.drawable.iv_connect)
                 views.setTextColor(R.id.tvWidget, Color.parseColor("#fdb900"))
             }
             else if (connectState == App.DISCONNECTED)
@@ -101,7 +103,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
                 views.setTextViewText(R.id.tvServerIP, "-")
                 image = getDrawableGray(context, serverObj?.iso)
                 views.setImageViewResource(R.id.ivLogo, R.drawable.logo_spark_disconnected)
-                views.setImageViewResource(R.id.ivConnect, R.drawable.ic_connect_n_new)
+                views.setImageViewResource(R.id.ivConnect, R.drawable.iv_disconnect)
                 views.setTextColor(R.id.tvWidget, Color.parseColor("#81FFFFFF"))
             }
             else if (connectState == App.CONNECTING) {
@@ -109,7 +111,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
                 views.setTextViewText(R.id.tvServerIP, "-")
                 image = getDrawableGray(context, serverObj?.iso)
                 views.setImageViewResource(R.id.ivLogo, R.drawable.logo_spark_disconnected)
-                views.setImageViewResource(R.id.ivConnect, R.drawable.ic_connect_n_new)
+                views.setImageViewResource(R.id.ivConnect, R.drawable.iv_disconnect)
                 views.setTextColor(R.id.tvWidget, Color.parseColor("#81FFFFFF"))
             }
 
@@ -134,6 +136,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
             views.setTextViewText(R.id.tvServerIP, "Sign in to continue")
             views.setViewVisibility(R.id.fl_ivLogo, View.GONE)
             views.setViewVisibility(R.id.fl_ivCountry, View.GONE)
+            views.setViewVisibility(R.id.fl_ivConnect, View.GONE)
             val intent3 = Intent(context, MainActivity::class.java)
             intent3.action = ACTION_BROADCAST_ACTIVITY
             val pendingIntent = PendingIntent.getActivity(context, 0, intent3, PendingIntent.FLAG_IMMUTABLE)
@@ -411,6 +414,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
         {
             remoteViews.setViewVisibility(R.id.fl_ivLogo, View.VISIBLE)
             remoteViews.setViewVisibility(R.id.fl_ivCountry, View.VISIBLE)
+            remoteViews.setViewVisibility(R.id.fl_ivConnect, View.VISIBLE)
 
             remoteViews.setTextViewText(R.id.tvWidget, "Connecting...")
             remoteViews.setTextColor(R.id.tvWidget, context.resources.getColor(R.color.white_half))
@@ -427,7 +431,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
             remoteViews.setTextColor(R.id.tvServerName, Color.parseColor("#81FFFFFF"))
             remoteViews.setTextColor(R.id.tvServerIP, Color.parseColor("#81FFFFFF"))
 
-            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.ic_connect_n_new)
+            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.iv_disconnect)
             remoteViews.setImageViewResource(R.id.ivLogo, R.drawable.logo_spark_disconnected)
 
             val image = getDrawableGray(context, serverObj?.iso)
@@ -439,9 +443,10 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
             remoteViews.setTextViewText(R.id.tvWidget, "App is not active")
             remoteViews.setTextViewText(R.id.tvServerName, "")
             remoteViews.setTextViewText(R.id.tvServerIP, "Sign in to continue")
-            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.ic_connect_n_new)
+            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.iv_disconnect)
             remoteViews.setViewVisibility(R.id.fl_ivLogo, View.GONE)
             remoteViews.setViewVisibility(R.id.fl_ivCountry, View.GONE)
+            remoteViews.setViewVisibility(R.id.fl_ivConnect, View.GONE)
         }
 
 
@@ -460,6 +465,8 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
         {
             remoteViews.setViewVisibility(R.id.fl_ivLogo, View.VISIBLE)
             remoteViews.setViewVisibility(R.id.fl_ivCountry, View.VISIBLE)
+            remoteViews.setViewVisibility(R.id.fl_ivConnect, View.VISIBLE)
+
 
 //            val random = Random().nextInt(601) + 200
 
@@ -480,7 +487,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
             remoteViews.setTextColor(R.id.tvServerName, Color.parseColor("#81FFFFFF"))
             remoteViews.setTextColor(R.id.tvServerIP, Color.parseColor("#81FFFFFF"))
 
-            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.ic_connect_widget_y)
+            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.iv_connect)
             remoteViews.setImageViewResource(R.id.ivLogo, R.drawable.logo_spark_connected)
 
             val image = getDrawable(context, serverObj?.iso)
@@ -494,6 +501,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
             remoteViews.setTextViewText(R.id.tvServerIP, "Sign in to continue")
             remoteViews.setViewVisibility(R.id.fl_ivLogo, View.GONE)
             remoteViews.setViewVisibility(R.id.fl_ivCountry, View.GONE)
+            remoteViews.setViewVisibility(R.id.fl_ivConnect, View.GONE)
         }
 
         appWidgetManager.updateAppWidget(appWidget, remoteViews)
@@ -513,6 +521,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
         {
             remoteViews.setViewVisibility(R.id.fl_ivLogo, View.VISIBLE)
             remoteViews.setViewVisibility(R.id.fl_ivCountry, View.VISIBLE)
+            remoteViews.setViewVisibility(R.id.fl_ivConnect, View.VISIBLE)
 
 //            val random = Random().nextInt(601) + 200
             remoteViews.setTextViewText(R.id.tvWidget, "Disconnected")
@@ -528,7 +537,7 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
             remoteViews.setTextColor(R.id.tvServerName, Color.parseColor("#81FFFFFF"))
             remoteViews.setTextColor(R.id.tvServerIP, Color.parseColor("#81FFFFFF"))
 
-            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.ic_connect_n_new)
+            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.iv_disconnect)
             remoteViews.setImageViewResource(R.id.ivLogo, R.drawable.logo_spark_disconnected)
 
             val image = getDrawableGray(context, serverObj?.iso)
@@ -546,9 +555,10 @@ class SimpleAppWidget() : AppWidgetProvider(), VPNConnectionCallBacks {
             remoteViews.setTextViewText(R.id.tvServerName, "")
             remoteViews.setTextViewText(R.id.tvServerIP, "Sign in to continue")
             remoteViews.setTextColor(R.id.tvWidget, Color.parseColor("#81FFFFFF"))
-            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.ic_connect_n_new)
+            remoteViews.setImageViewResource(R.id.ivConnect, R.drawable.iv_disconnect)
             remoteViews.setViewVisibility(R.id.fl_ivLogo, View.GONE)
             remoteViews.setViewVisibility(R.id.fl_ivCountry, View.GONE)
+            remoteViews.setViewVisibility(R.id.fl_ivConnect, View.GONE)
         }
 
         appWidgetManager.updateAppWidget(appWidget, remoteViews)

+ 2 - 2
app/src/main/res/drawable/round_button_connect.xml

@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android">
     <solid
-        android:color="#394B81" />
+        android:color="#4071fb" />
 
     <corners
         android:radius="25dp" />
 
-    <stroke android:color="#394B81"
+    <stroke android:color="#4071fb"
         android:width="5px"/>
 
 </shape>

+ 3 - 3
app/src/main/res/layout/simple_app_widget.xml

@@ -5,7 +5,7 @@
     android:id="@+id/main_app"
     android:clickable="true"
     android:focusable="true"
-    android:background="@color/app_blue_color"
+    android:background="@color/light_blue_2"
     android:paddingBottom="5dp"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
@@ -40,7 +40,7 @@
         android:layout_marginStart="10dp"
         android:layout_marginTop="8dp"
         android:layout_marginBottom="5dp"
-        android:background="@color/app_blue_color"
+        android:background="@color/light_blue_2"
         android:clickable="false"
         android:contentDescription="@string/disconnected"
         android:focusable="false"
@@ -72,7 +72,7 @@
             android:id="@+id/ivConnect"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:src="@drawable/ic_connect_n_new"
+            android:src="@drawable/iv_disconnect"
             android:clickable="true"
             android:focusable="true"
             />