Add a progress bar

This commit is contained in:
2dust committed 2024-08-14 17:55:41 +08:00
1 parent a0223a3eee
commit 828a39331b
3 files changed
+57 -48

No files matched your search

@@ -128,7 +128,6 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
initGroupTab()
setupViewModel()
mainViewModel.copyAssets(assets)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
RxPermissions(this)
@@ -175,6 +174,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
}
}
mainViewModel.startListenBroadcast()
mainViewModel.copyAssets(assets)
}
private fun initGroupTab() {
@@ -310,7 +310,18 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
}
R.id.export_all -> {
mainViewModel.exportAllServer()
binding.pbWaiting.show()
lifecycleScope.launch(Dispatchers.IO) {
val ret = mainViewModel.exportAllServer()
launch(Dispatchers.Main) {
if (ret == 0)
toast(R.string.toast_success)
else
toast(R.string.toast_failure)
binding.pbWaiting.hide()
}
}
true
}
@@ -332,7 +343,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
R.id.del_all_config -> {
AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm)
.setPositiveButton(android.R.string.ok) { _, _ ->
binding.pbWaiting.show()
lifecycleScope.launch(Dispatchers.IO) {
mainViewModel.removeAllServer()
launch(Dispatchers.Main) {
mainViewModel.reloadServerList()
binding.pbWaiting.hide()
}
}
}
.setNegativeButton(android.R.string.no) {_, _ ->
//do noting
@@ -343,18 +361,34 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
R.id.del_duplicate_config-> {
AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm)
.setPositiveButton(android.R.string.ok) { _, _ ->
mainViewModel.removeDuplicateServer()
binding.pbWaiting.show()
lifecycleScope.launch(Dispatchers.IO) {
val ret = mainViewModel.removeDuplicateServer()
launch(Dispatchers.Main) {
mainViewModel.reloadServerList()
toast(getString(R.string.title_del_duplicate_config_count, ret))
binding.pbWaiting.hide()
}
.setNegativeButton(android.R.string.no) {_, _ ->
}
}
.setNegativeButton(android.R.string.no) { _, _ ->
//do noting
}
.show()
true
}
R.id.del_invalid_config -> {
AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm)
.setPositiveButton(android.R.string.ok) { _, _ ->
binding.pbWaiting.show()
lifecycleScope.launch(Dispatchers.IO) {
mainViewModel.removeInvalidServer()
launch(Dispatchers.Main) {
mainViewModel.reloadServerList()
binding.pbWaiting.hide()
}
}
}
.setNegativeButton(android.R.string.no) {_, _ ->
//do noting
@@ -363,7 +397,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
true
}
R.id.sort_by_test_results -> {
binding.pbWaiting.show()
lifecycleScope.launch(Dispatchers.IO) {
mainViewModel.sortByTestResults()
launch(Dispatchers.Main) {
mainViewModel.reloadServerList()
binding.pbWaiting.hide()
}
}
true
}
else -> super.onOptionsItemSelected(item)
@@ -5,22 +5,17 @@ import android.text.TextUtils
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AlertDialog
import androidx.work.Constraints
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.NetworkType
import androidx.work.PeriodicWorkRequest
import androidx.work.multiprocess.RemoteWorkManager
import androidx.lifecycle.lifecycleScope
import com.google.gson.Gson
import com.tencent.mmkv.MMKV
import com.v2ray.ang.AngApplication
import com.v2ray.ang.R
import com.v2ray.ang.databinding.ActivitySubEditBinding
import com.v2ray.ang.dto.SubscriptionItem
import com.v2ray.ang.extension.toast
import com.v2ray.ang.service.SubscriptionUpdater
import com.v2ray.ang.util.MmkvManager
import com.v2ray.ang.util.Utils
import java.util.concurrent.TimeUnit
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class SubEditActivity : BaseActivity() {
private val binding by lazy {ActivitySubEditBinding.inflate(layoutInflater)}
@@ -106,9 +101,13 @@ class SubEditActivity : BaseActivity() {
if (editSubId.isNotEmpty()) {
AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm)
.setPositiveButton(android.R.string.ok) { _, _ ->
lifecycleScope.launch(Dispatchers.IO) {
MmkvManager.removeSubscription(editSubId)
launch(Dispatchers.Main) {
finish()
}
}
}
.setNegativeButton(android.R.string.no) {_, _ ->
// do nothing
}
@@ -173,8 +173,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
}
fun exportAllServer() {
viewModelScope.launch(Dispatchers.Default) {
fun exportAllServer() : Int {
val serverListCopy =
if (subscriptionId.isNullOrEmpty()) {
serverList
@@ -186,15 +185,10 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
getApplication<AngApplication>(),
serverListCopy
)
launch(Dispatchers.Main) {
if (ret == 0)
getApplication<AngApplication>().toast(R.string.toast_success)
else
getApplication<AngApplication>().toast(R.string.toast_failure)
}
}
return ret
}
fun testAllTcping() {
tcpingTestScope.coroutineContext[Job]?.cancelChildren()
SpeedtestUtil.closeAllTcpSockets()
@@ -279,8 +273,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
return -1
}
fun removeDuplicateServer() {
viewModelScope.launch(Dispatchers.Default) {
fun removeDuplicateServer() : Int {
val serversCacheCopy = mutableListOf<Pair<String, ServerConfig>>()
for (it in serversCache) {
val config = MmkvManager.decodeServerConfig(it.guid) ?: continue
@@ -302,21 +295,11 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
for (it in deleteServer) {
MmkvManager.removeServer(it)
}
launch(Dispatchers.Main) {
reloadServerList()
getApplication<AngApplication>().toast(
getApplication<AngApplication>().getString(
R.string.title_del_duplicate_config_count,
deleteServer.count()
)
)
}
}
return deleteServer.count()
}
fun removeAllServer() {
viewModelScope.launch(Dispatchers.Default) {
if (subscriptionId.isNullOrEmpty()) {
MmkvManager.removeAllServer()
} else {
@@ -325,14 +308,9 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
MmkvManager.removeServer(item.guid)
}
}
launch(Dispatchers.Main) {
reloadServerList()
}
}
}
fun removeInvalidServer() {
viewModelScope.launch(Dispatchers.Default) {
if (subscriptionId.isNullOrEmpty()) {
MmkvManager.removeInvalidServer("")
} else {
@@ -341,19 +319,10 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
MmkvManager.removeInvalidServer(item.guid)
}
}
launch(Dispatchers.Main) {
reloadServerList()
}
}
}
fun sortByTestResults() {
viewModelScope.launch(Dispatchers.Default) {
MmkvManager.sortByTestResults()
launch(Dispatchers.Main) {
reloadServerList()
}
}
}