Skip to content

Commit 3ea407d

Browse files
committed
fix tag selection save button not visible
1 parent 942e645 commit 3ea407d

3 files changed

Lines changed: 28 additions & 12 deletions

File tree

core/src/main/java/com/example/util/simpletimetracker/core/extension/BottomSheetDialogExtensions.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package com.example.util.simpletimetracker.core.extension
33
import android.view.View
44
import android.widget.FrameLayout
55
import androidx.coordinatorlayout.widget.CoordinatorLayout
6+
import androidx.recyclerview.widget.LinearLayoutManager
67
import androidx.recyclerview.widget.RecyclerView
78
import com.example.util.simpletimetracker.core.R
89
import com.example.util.simpletimetracker.feature_views.extension.addOnScrollListenerAdapter
10+
import com.google.android.flexbox.FlexboxLayoutManager
911
import com.google.android.material.bottomsheet.BottomSheetBehavior
1012
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
1113

@@ -45,4 +47,21 @@ fun BottomSheetDialogFragment.blockContentScroll(recyclerView: RecyclerView) {
4547
if (newState == RecyclerView.SCROLL_STATE_IDLE) behavior?.isDraggable = true
4648
},
4749
)
50+
}
51+
52+
// Disable sheet swipe on content scroll to avoid accidentally closing the sheet when scrolling items.
53+
fun BottomSheetDialogFragment.blockContentScrollByPosition(recyclerView: RecyclerView) {
54+
fun doBlock() {
55+
val layoutManager = recyclerView.layoutManager
56+
val firstPosition = when (layoutManager) {
57+
is LinearLayoutManager -> layoutManager.findFirstCompletelyVisibleItemPosition()
58+
is FlexboxLayoutManager -> layoutManager.findFirstCompletelyVisibleItemPosition()
59+
else -> 0
60+
}
61+
behavior?.isDraggable = firstPosition == 0
62+
}
63+
recyclerView.addOnScrollListenerAdapter(
64+
onScrolled = { _, _, _ -> doBlock() },
65+
onScrollStateChanged = { _, _ -> doBlock() },
66+
)
4867
}

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/recordTagSelection/RecordTagSelectionDialogFragment.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example.util.simpletimetracker.feature_dialogs.recordTagSelection
22

3-
import com.example.util.simpletimetracker.feature_dialogs.databinding.RecordTagSelectionDialogFragmentBinding as Binding
43
import android.os.Bundle
54
import android.view.LayoutInflater
65
import android.view.ViewGroup
@@ -9,7 +8,7 @@ import androidx.fragment.app.commit
98
import androidx.recyclerview.widget.RecyclerView
109
import com.example.util.simpletimetracker.core.base.BaseBottomSheetFragment
1110
import com.example.util.simpletimetracker.core.dialog.OnTagSelectedListener
12-
import com.example.util.simpletimetracker.core.extension.blockContentScroll
11+
import com.example.util.simpletimetracker.core.extension.blockContentScrollByPosition
1312
import com.example.util.simpletimetracker.core.extension.setFullScreen
1413
import com.example.util.simpletimetracker.core.extension.setSkipCollapsed
1514
import com.example.util.simpletimetracker.core.manager.KeyboardVisibilityManager
@@ -19,6 +18,7 @@ import com.example.util.simpletimetracker.navigation.ScreenFactory
1918
import com.example.util.simpletimetracker.navigation.params.screen.RecordTagSelectionParams
2019
import dagger.hilt.android.AndroidEntryPoint
2120
import javax.inject.Inject
21+
import com.example.util.simpletimetracker.feature_dialogs.databinding.RecordTagSelectionDialogFragmentBinding as Binding
2222

2323
@AndroidEntryPoint
2424
class RecordTagSelectionDialogFragment :
@@ -41,10 +41,13 @@ class RecordTagSelectionDialogFragment :
4141

4242
override fun initDialog() {
4343
setSkipCollapsed()
44+
// Usual blockContentScroll doesn't work,
45+
// also need to block here, because long comment input wouldn't scroll otherwise
46+
// and would close the sheet instead.
4447
binding.containerRecordTagSelection.post {
4548
binding.root.descendants
4649
.filterIsInstance<RecyclerView>().firstOrNull()
47-
?.let(::blockContentScroll)
50+
?.let(::blockContentScrollByPosition)
4851
}
4952
}
5053

features/feature_dialogs/src/main/res/layout/record_tag_selection_dialog_fragment.xml

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,11 @@
1313
android:src="@drawable/dialog_arrow"
1414
android:tint="?appContrastColor" />
1515

16-
<androidx.core.widget.NestedScrollView
16+
<FrameLayout
17+
android:id="@+id/containerRecordTagSelection"
1718
android:layout_width="match_parent"
1819
android:layout_height="0dp"
1920
android:layout_marginTop="16dp"
20-
android:layout_weight="1">
21-
22-
<FrameLayout
23-
android:id="@+id/containerRecordTagSelection"
24-
android:layout_width="match_parent"
25-
android:layout_height="match_parent" />
26-
27-
</androidx.core.widget.NestedScrollView>
21+
android:layout_weight="1" />
2822

2923
</androidx.appcompat.widget.LinearLayoutCompat>

0 commit comments

Comments
 (0)