feat(creator): 본인 홈 FAB를 추가한다

This commit is contained in:
2026-06-16 22:03:49 +09:00
parent 722f84039f
commit 6a6b1138a8
3 changed files with 204 additions and 0 deletions

View File

@@ -53,6 +53,7 @@ class CreatorChannelActivity :
private var statusBarHeight: Int = 0
private var tabLayoutMediator: TabLayoutMediator? = null
private var pageChangeCallback: ViewPager2.OnPageChangeCallback? = null
private var isOwnerFabExpanded: Boolean = false
private val baseTitleBarHeight: Int by lazy { 60.dpToPx().toInt() }
override val shouldApplySystemBarTopInset: Boolean = false
@@ -76,6 +77,9 @@ class CreatorChannelActivity :
binding.ivMore.setOnClickListener { onMoreClicked() }
binding.layoutFollowCapsule.setOnClickListener { onFollowCapsuleClicked() }
binding.ivBell.setOnClickListener { onBellClicked() }
binding.ownerFabButton.setOnClickListener { expandOwnerFab() }
binding.ownerFabDim.setOnClickListener { collapseOwnerFab() }
binding.ownerFabCloseButton.setOnClickListener { collapseOwnerFab() }
binding.tvChatButton.setOnClickListener {
currentHeader?.characterId?.let { characterId -> homeActionDelegate?.createChatRoom(characterId) }
}
@@ -266,6 +270,10 @@ class CreatorChannelActivity :
}
val callback = object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
if (position != CreatorChannelTab.Home.ordinal) {
isOwnerFabExpanded = false
}
updateOwnerFabVisibility()
updateViewPagerHeight()
}
}
@@ -277,6 +285,7 @@ class CreatorChannelActivity :
currentHeader = header
bindHeader(header)
bindTitleBar(header)
updateOwnerFabVisibility()
}
override fun onCreatorChannelFollowProgressChanged(inProgress: Boolean) {
@@ -310,6 +319,24 @@ class CreatorChannelActivity :
updateViewPagerHeight()
}
private fun expandOwnerFab() {
isOwnerFabExpanded = true
updateOwnerFabVisibility()
}
private fun collapseOwnerFab() {
isOwnerFabExpanded = false
updateOwnerFabVisibility()
}
private fun updateOwnerFabVisibility() {
val shouldShowOwnerFab =
currentHeader?.isOwner == true && binding.viewPager.currentItem == CreatorChannelTab.Home.ordinal
binding.ownerFabDim.isVisible = shouldShowOwnerFab && isOwnerFabExpanded
binding.ownerFabExpandedContainer.isVisible = shouldShowOwnerFab && isOwnerFabExpanded
binding.ownerFabButton.isVisible = shouldShowOwnerFab && !isOwnerFabExpanded
}
override fun onCreatorChannelDonationClicked() {
val header = currentHeader ?: return
if (header.isOwner) return

View File

@@ -237,4 +237,132 @@
tools:visibility="visible" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:id="@+id/owner_fab_dim"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#66000000"
android:clickable="true"
android:focusable="true"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<LinearLayout
android:id="@+id/owner_fab_expanded_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_14"
android:layout_marginBottom="@dimen/spacing_14"
android:gravity="end"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible">
<FrameLayout
android:id="@+id/owner_fab_community_button"
android:layout_width="66dp"
android:layout_height="66dp"
android:background="@drawable/bg_creator_channel_owner_fab"
android:clickable="true"
android:contentDescription="@string/creator_channel_owner_fab_community"
android:elevation="8dp"
android:focusable="true"
android:padding="@dimen/spacing_14">
<ImageView
android:layout_width="38dp"
android:layout_height="38dp"
android:contentDescription="@null"
android:src="@drawable/ic_new_upload_community_post" />
</FrameLayout>
<FrameLayout
android:id="@+id/owner_fab_audio_button"
android:layout_width="66dp"
android:layout_height="66dp"
android:layout_marginTop="@dimen/spacing_14"
android:background="@drawable/bg_creator_channel_owner_fab"
android:clickable="true"
android:contentDescription="@string/creator_channel_owner_fab_audio"
android:elevation="8dp"
android:focusable="true"
android:padding="@dimen/spacing_14">
<ImageView
android:layout_width="38dp"
android:layout_height="38dp"
android:contentDescription="@null"
android:src="@drawable/ic_new_upload_audio" />
</FrameLayout>
<FrameLayout
android:id="@+id/owner_fab_live_button"
android:layout_width="66dp"
android:layout_height="66dp"
android:layout_marginTop="@dimen/spacing_14"
android:background="@drawable/bg_creator_channel_owner_fab_live"
android:clickable="true"
android:contentDescription="@string/creator_channel_owner_fab_live"
android:elevation="8dp"
android:focusable="true"
android:padding="@dimen/spacing_14">
<ImageView
android:layout_width="38dp"
android:layout_height="38dp"
android:contentDescription="@null"
android:src="@drawable/ic_new_create_live" />
</FrameLayout>
<FrameLayout
android:id="@+id/owner_fab_close_button"
android:layout_width="66dp"
android:layout_height="66dp"
android:layout_marginTop="@dimen/spacing_14"
android:background="@drawable/bg_creator_channel_owner_fab_close"
android:clickable="true"
android:contentDescription="@string/creator_channel_owner_fab_close"
android:elevation="8dp"
android:focusable="true"
android:padding="@dimen/spacing_14">
<ImageView
android:layout_width="38dp"
android:layout_height="38dp"
android:contentDescription="@null"
android:src="@drawable/ic_new_x_black" />
</FrameLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/owner_fab_button"
android:layout_width="66dp"
android:layout_height="66dp"
android:layout_marginEnd="@dimen/spacing_14"
android:layout_marginBottom="@dimen/spacing_14"
android:background="@drawable/bg_creator_channel_owner_fab"
android:clickable="true"
android:contentDescription="@string/creator_channel_owner_fab_open"
android:elevation="8dp"
android:focusable="true"
android:padding="@dimen/spacing_14"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible">
<ImageView
android:id="@+id/iv_owner_fab_icon"
android:layout_width="38dp"
android:layout_height="38dp"
android:contentDescription="@null"
android:src="@drawable/ic_plus_no_bg" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>