feat: Add haptic feedback for avatar expansion completion and adjust corner radius behavior

This commit is contained in:
k1ngsterr1
2026-01-31 03:39:57 +05:00
parent d9453edd05
commit 0cb8573efc

View File

@@ -31,6 +31,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.NestedScrollSource
import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.nestedscroll.nestedScroll
@@ -38,6 +39,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
@@ -793,16 +795,29 @@ private fun CollapsingProfileHeader(
) )
} }
// Закругление: круг по умолчанию, при overscroll становится квадратом // Закругление: круг по умолчанию, при overscroll становится квадратом БЕЗ скругления
val cornerRadius = val cornerRadius =
if (collapseProgress < 0.1f && expansionProgress > 0f) { if (collapseProgress < 0.1f && expansionProgress > 0f) {
// Overscroll: круг -> квадрат с небольшим скруглением // Overscroll: круг -> квадрат без скругления
androidx.compose.ui.unit.lerp(avatarSize / 2, 12.dp, expansionProgress) androidx.compose.ui.unit.lerp(avatarSize / 2, 0.dp, expansionProgress)
} else { } else {
// Всегда круг // Всегда круг
avatarSize / 2 avatarSize / 2
} }
// Haptic feedback при достижении полного квадрата
val hapticFeedback = LocalHapticFeedback.current
var hasTriggeredHaptic by remember { mutableStateOf(false) }
LaunchedEffect(expansionProgress) {
if (expansionProgress >= 0.95f && !hasTriggeredHaptic) {
hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress)
hasTriggeredHaptic = true
} else if (expansionProgress < 0.5f) {
hasTriggeredHaptic = false
}
}
val avatarFontSize = androidx.compose.ui.unit.lerp(40.sp, 0.sp, collapseProgress) val avatarFontSize = androidx.compose.ui.unit.lerp(40.sp, 0.sp, collapseProgress)
// ═══════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════