feat: add rotate anim to profile update btn

This commit is contained in:
Steve Johnson 2023-10-30 18:57:51 +08:00
parent b091a87a37
commit 9773ea73d4
6 changed files with 56 additions and 4 deletions

View File

@ -105,7 +105,7 @@ class MetaFeatureSettingsActivity : BaseActivity<MetaFeatureSettingsDesign>() {
val ext = "." + displayName.substringAfterLast(".")
if(!validDatabaseExtensions.contains(ext))
{
val dialog = MaterialAlertDialogBuilder(this)
MaterialAlertDialogBuilder(this)
.setTitle("Unknown Database Format")
.setMessage("Only ${validDatabaseExtensions.joinToString("/")} are supported")
.setPositiveButton("OK"){ _, _ -> }

View File

@ -6,8 +6,10 @@ import com.github.kr328.clash.common.util.ticker
import com.github.kr328.clash.design.ProfilesDesign
import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.util.withProfile
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select
import kotlinx.coroutines.withContext
import java.util.concurrent.TimeUnit
class ProfilesActivity : BaseActivity<ProfilesDesign>() {
@ -34,9 +36,16 @@ class ProfilesActivity : BaseActivity<ProfilesDesign>() {
startActivity(NewProfileActivity::class.intent)
ProfilesDesign.Request.UpdateAll ->
withProfile {
queryAll().forEach { p ->
if (p.imported && p.type != Profile.Type.File)
update(p.uuid)
try {
queryAll().forEach { p ->
if (p.imported && p.type != Profile.Type.File)
update(p.uuid)
}
}
finally {
withContext(Dispatchers.Main) {
design.finishUpdateAll();
}
}
}
is ProfilesDesign.Request.Update ->

View File

@ -4,6 +4,8 @@ import android.app.Dialog
import android.content.Context
import android.view.View
import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import com.github.kr328.clash.design.adapter.ProfileAdapter
import com.github.kr328.clash.design.databinding.DesignProfilesBinding
import com.github.kr328.clash.design.databinding.DialogProfilesMenuBinding
@ -29,6 +31,13 @@ class ProfilesDesign(context: Context) : Design<ProfilesDesign.Request>(context)
.inflate(context.layoutInflater, context.root, false)
private val adapter = ProfileAdapter(context, this::requestActive, this::showMenu)
private var allUpdating: Boolean
get() = adapter.states.allUpdating;
set(value) {
adapter.states.allUpdating = value
}
private val rotateAnimation : Animation = AnimationUtils.loadAnimation(context, R.anim.rotate_infinite)
override val root: View
get() = binding.root
@ -84,7 +93,14 @@ class ProfilesDesign(context: Context) : Design<ProfilesDesign.Request>(context)
}
fun requestUpdateAll() {
allUpdating = true;
requests.trySend(Request.UpdateAll)
changeUpdateAllButtonStatus()
}
fun finishUpdateAll() {
allUpdating = false;
changeUpdateAllButtonStatus()
}
fun requestCreate() {
@ -118,4 +134,12 @@ class ProfilesDesign(context: Context) : Design<ProfilesDesign.Request>(context)
dialog.dismiss()
}
private fun changeUpdateAllButtonStatus() {
if (allUpdating) {
binding.updateView.startAnimation(rotateAnimation)
} else {
binding.updateView.clearAnimation()
}
}
}

View File

@ -4,6 +4,8 @@ import android.content.Context
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.github.kr328.clash.design.databinding.AdapterProfileBinding
import com.github.kr328.clash.design.model.ProfilePageState
import com.github.kr328.clash.design.model.ProxyPageState
import com.github.kr328.clash.design.ui.ObservableCurrentTime
import com.github.kr328.clash.design.util.layoutInflater
import com.github.kr328.clash.service.model.Profile
@ -18,6 +20,7 @@ class ProfileAdapter(
private val currentTime = ObservableCurrentTime()
var profiles: List<Profile> = emptyList()
val states = ProfilePageState()
fun updateElapsed() {
currentTime.update()

View File

@ -0,0 +1,5 @@
package com.github.kr328.clash.design.model
class ProfilePageState {
var allUpdating = false
}

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="0"
android:repeatCount="infinite"
android:interpolator="@android:anim/cycle_interpolator" />
</set>