浏览代码

Set ripple effect when thumb icon clicked, add delay 150ms when clicked so that background color changed after some delay

Khubaib 8 月之前
父节点
当前提交
43095bf552
共有 1 个文件被更改,包括 70 次插入38 次删除
  1. 70 38
      app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/HomeScreen.kt

+ 70 - 38
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/HomeScreen.kt

@@ -8,11 +8,15 @@ import android.os.Handler
 import android.util.Log
 import android.widget.Toast
 import androidx.activity.ComponentActivity
+import androidx.compose.animation.animateColorAsState
+import androidx.compose.animation.core.animateSizeAsState
 import androidx.compose.foundation.BorderStroke
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.gestures.detectTapGestures
+import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.BoxScope
@@ -34,6 +38,7 @@ import androidx.compose.foundation.text.ClickableText
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.outlined.ThumbDown
 import androidx.compose.material.icons.outlined.ThumbUp
+import androidx.compose.material.ripple.rememberRipple
 import androidx.compose.material3.AlertDialog
 import androidx.compose.material3.Button
 import androidx.compose.material3.ButtonDefaults
@@ -45,6 +50,7 @@ import androidx.compose.material3.Surface
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.MutableState
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.livedata.observeAsState
@@ -107,6 +113,7 @@ import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
 import com.vpn.fastestvpnservice.widgets.SimpleAppWidget
 import com.wireguard.android.backend.GoBackend
 import de.blinkt.openvpn.core.App
+import kotlinx.coroutines.delay
 import java.util.Locale
 
 lateinit var act: ComponentActivity
@@ -765,8 +772,10 @@ fun Home(
                 }
                 else {
                     var isFeedbackClicked by remember { mutableStateOf(prefHelper.getFeedbackState()) }
+                    var isDelayedFeedbackClicked by remember { mutableStateOf(isFeedbackClicked) }
                     var isThumbUpClicked by remember { mutableStateOf(App.isThumbUpClicked) }
                     var isThumbDownClicked by remember { mutableStateOf(App.isThumbDownClicked) }
+                    var isRipple = false
 
                     Box(
                         modifier = Modifier
@@ -907,14 +916,25 @@ fun Home(
                         }
                     }
 
+                    LaunchedEffect(key1 = isFeedbackClicked) {
+                        if (isFeedbackClicked) {
+                            delay(150)
+                            isDelayedFeedbackClicked = true
+                        }
+                    }
+
+                    val backgroundColor by animateColorAsState(
+                        targetValue = if (isDelayedFeedbackClicked) colorResource(id = R.color.yellow_feedback)
+                        else colorResource(id = R.color.blue_feedback), label = "Color"
+                    )
+
                     Box(
                         modifier = Modifier
                             .padding(16.dp)
                             .fillMaxWidth()
                             .height(70.dp)
                             .background(
-                                if (isFeedbackClicked) colorResource(id = R.color.yellow_feedback)
-                                else colorResource(id = R.color.blue_feedback),
+                                backgroundColor,
                                 shape = RoundedCornerShape(12.dp)
                             )
                             .border(
@@ -949,43 +969,55 @@ fun Home(
                                     modifier = Modifier
                                         .padding(end = 25.dp)
                                         .size(24.dp)
-                                        .pointerInput(Unit) {
-                                            detectTapGestures {
-                                                if (!isFeedbackClicked) {
-                                                    isFeedbackClicked = true
-                                                    prefHelper.setFeedbackState(true)
-                                                    isThumbUpClicked = true
-                                                    App.isThumbUpClicked = true
-                                                }
-                                            }
-                                        },
-                                    colorFilter = ColorFilter.tint(
-                                        if (isFeedbackClicked && isThumbUpClicked) colorResource(id = R.color.switch_green)
-                                        else colorResource(id = R.color.white)
-                                    )
-                                )
-                                Image(
-                                    imageVector = Icons.Outlined.ThumbDown,
-                                    contentDescription = "Thumb Down",
-                                    modifier = Modifier
-                                        .padding(end = 10.dp)
-                                        .size(24.dp)
-                                        .pointerInput(Unit) {
-                                            detectTapGestures {
-                                                if (!isFeedbackClicked) {
-                                                    isFeedbackClicked = true
-                                                    prefHelper.setFeedbackState(true)
-                                                    isThumbDownClicked = true
-                                                    App.isThumbDownClicked = true
-                                                }
+                                        .clickable(
+                                            indication = rememberRipple(
+                                                bounded = true,
+                                                color = colorResource(id = R.color.switch_green)
+                                            ),
+                                            interactionSource = remember { MutableInteractionSource() }
+                                        ) {
+                                            if (!isFeedbackClicked) {
+                                                isFeedbackClicked = true
+                                                prefHelper.setFeedbackState(true)
+                                                isThumbUpClicked = true
+                                                App.isThumbUpClicked = true
+                                                isRipple = true
                                             }
-                                        },
-                                    colorFilter = ColorFilter.tint(
-                                        if (isFeedbackClicked && isThumbDownClicked) colorResource(id = R.color.red)
-                                        else colorResource(id = R.color.white)
-                                    )
-                                )
-                            }
+                                        }
+                                            ,
+                                            colorFilter = ColorFilter.tint(
+                                                if (isFeedbackClicked && isThumbUpClicked) colorResource(id = R.color.switch_green)
+                                                else colorResource(id = R.color.white)
+                                            )
+                                            )
+                                            Image(
+                                                imageVector = Icons.Outlined.ThumbDown,
+                                                contentDescription = "Thumb Down",
+                                                modifier = Modifier
+                                                    .padding(end = 10.dp)
+                                                    .size(24.dp)
+                                                    .clickable(
+                                                        indication = rememberRipple(
+                                                            bounded = true,
+                                                            color = colorResource(id = R.color.Red)
+                                                        ),
+                                                        interactionSource = remember { MutableInteractionSource() }
+                                                    ) {
+                                                        if (!isFeedbackClicked) {
+                                                            isFeedbackClicked = true
+                                                            prefHelper.setFeedbackState(true)
+                                                            isThumbDownClicked = true
+                                                            App.isThumbDownClicked = true
+                                                        }
+                                                    },
+                                                colorFilter = ColorFilter.tint(
+                                                    if (isFeedbackClicked && isThumbDownClicked) colorResource(
+                                                        id = R.color.Red
+                                                    )
+                                                    else colorResource(id = R.color.white)
+                                                )
+                                            )
+                                        }
                         }
                     }
                 }