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.graphicsLayer
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.NestedScrollSource
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.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
@@ -793,16 +795,29 @@ private fun CollapsingProfileHeader(
)
}
// Закругление: круг по умолчанию, при overscroll становится квадратом
// Закругление: круг по умолчанию, при overscroll становится квадратом БЕЗ скругления
val cornerRadius =
if (collapseProgress < 0.1f && expansionProgress > 0f) {
// Overscroll: круг -> квадрат с небольшим скруглением
androidx.compose.ui.unit.lerp(avatarSize / 2, 12.dp, expansionProgress)
// Overscroll: круг -> квадрат без скругления
androidx.compose.ui.unit.lerp(avatarSize / 2, 0.dp, expansionProgress)
} else {
// Всегда круг
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)
// ═══════════════════════════════════════════════════════════