浏览代码

Optimized recently connected servers and showing as per selected language

Khubaib 7 月之前
父节点
当前提交
cfdbd5b994

+ 15 - 0
app/src/main/java/com/vpn/fastestvpnservice/helpers/BasePreferenceHelper.kt

@@ -53,6 +53,7 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         removePreference(context, KEY_FILENAME, KEY_LAUNCH)
 //        removePreference(context, KEY_FILENAME, LANGUAGE)
         removePreference(context, KEY_FILENAME, KEY_SERVERS_ID)
+        removePreference(context, KEY_FILENAME, KEY_RECENTLY_SERVERS_ID)
     }
 
     fun clearServerObject() {
@@ -133,6 +134,19 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         putStringPreference(context, KEY_FILENAME, KEY_RECENTLY_SERVERS, Gson().toJson(list))
     }
 
+    fun getRecentlyListId(): ArrayList<Int>? {
+        val type = object : TypeToken<ArrayList<Int?>?>() {}.type
+        return Gson().fromJson<ArrayList<Int>>(
+            getStringPreference(
+                context, KEY_FILENAME, KEY_RECENTLY_SERVERS_ID
+            ), type
+        )
+    }
+
+    fun setRecentlyListId(list: ArrayList<Int>?) {
+        putStringPreference(context, KEY_FILENAME, KEY_RECENTLY_SERVERS_ID, Gson().toJson(list))
+    }
+
     fun getServersId(): ArrayList<Int>? {
         val type = object : TypeToken<ArrayList<Int?>?>() {}.type
         return Gson().fromJson<ArrayList<Int>>(
@@ -666,5 +680,6 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         private const val KEY_LAUNCH = "key_launch"
         private const val LANGUAGE = "key_language"
         private const val KEY_SERVERS_ID = "key_servers_id"
+        private const val KEY_RECENTLY_SERVERS_ID = "keydata_recently_servers_id"
     }
 }

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

@@ -429,7 +429,8 @@ fun ColumnScope.ShowRecommendedList(
 //                recentLocation.add(it)
 //            }
 
-            val recentList = prefHelper.getRecentlyList()
+            val recentList = serverListViewModelSplash.getRecentlyConnectedServer()
+//            val recentList = prefHelper.getRecentlyList()
             recentList?.let {
                 items(items = it) { server ->
                     ServerItem(server, navHostController, server.ping)

+ 1 - 1
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/SettingsScreen.kt

@@ -1256,7 +1256,7 @@ fun SelectLanguage(
                         while (true) {
                             for (i in 1..100) {
                                 progress = i.toFloat()/100F
-                                delay(20)
+                                delay(25)
                             }
                             progress = 0.1F
                         }

+ 46 - 1
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/ServerListViewModel.kt

@@ -37,6 +37,7 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 import retrofit2.Call
+import java.lang.reflect.Array
 
 class ServerListViewModel(context: Context): ViewModel() {
 
@@ -867,7 +868,7 @@ class ServerListViewModel(context: Context): ViewModel() {
         mutableLiveDataGroupServers.value = serversGroup
     }
 
-    fun setRecentlyConnectedServer(server: Server) {
+    fun setRecentlyConnectedServer1(server: Server) {
         val recentList = preferencesHelper.getRecentlyList()
         val tempList = ArrayList<Server>()
         recentList?.let { tempList.addAll(it) }
@@ -888,4 +889,48 @@ class ServerListViewModel(context: Context): ViewModel() {
         preferencesHelper.setRecentlyList(tempList)
     }
 
+    fun getRecentlyConnectedServer(): ArrayList<Server> {
+        val tempList = ArrayList<Server>()
+        val getRecentlyServersIdList = preferencesHelper.getRecentlyListId()
+
+        preferencesHelper.getServerData().let {
+            it.forEach {
+                tempList.addAll(it.servers?.filter { server ->
+                    getRecentlyServersIdList?.any { id ->
+                        server.id == id
+                    } == true
+                }!!)
+            }
+        }
+
+        if (isAlphabetList.value) {
+            tempList.sortBy {
+                it.server_name
+            }
+        }
+
+        return tempList
+    }
+
+    fun setRecentlyConnectedServer(server: Server) {
+        val recentList = preferencesHelper.getRecentlyListId()
+        val tempList = ArrayList<Int>()
+        recentList?.let { tempList.addAll(it) }
+
+        if (tempList.size == 0) {
+            server.id?.let { tempList.add(it) }
+        }
+        else {
+            if (!tempList.any {
+                    it == server.id
+                }) {
+                if (tempList.size != 5 && tempList.size < 5) {
+                    server.id?.let { tempList.add(0, it) }
+                }
+            }
+        }
+
+        preferencesHelper.setRecentlyListId(tempList)
+    }
+
 }