Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ private void initRecyclerView() {
viewModel.getSelectListAdapter().setContext(getActivity());
AudioPlayer audioPlayer = audioPlayerFactory.create(requireActivity(), getViewLifecycleOwner());
viewModel.getSelectListAdapter().setAudioPlayer(audioPlayer);
binding.choicesRecyclerView.initRecyclerView(viewModel.getSelectListAdapter(), viewModel.isFlex());
binding.choicesRecyclerView.initRecyclerView(viewModel.getSelectListAdapter(), viewModel.isFlex(), 0);
}

public void setListener(SelectMinimalDialogListener listener) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package org.odk.collect.android.views

import android.content.Context
import android.graphics.Rect
import android.util.AttributeSet
import android.view.View
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.flexbox.FlexboxLayoutManager
import org.odk.collect.android.R
import org.odk.collect.android.adapters.AbstractSelectListAdapter

class ChoicesRecyclerView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null
) : RecyclerView(context, attrs) {

private var maxHeight = 0
Comment thread
grzesiek2010 marked this conversation as resolved.
Outdated

fun initRecyclerView(adapter: AbstractSelectListAdapter, isFlex: Boolean, maxHeight: Int) {
this.maxHeight = maxHeight
if (isFlex) {
enableFlexboxLayout()
} else {
enableGridLayout(adapter.numColumns)
}
setAdapter(adapter)
}

override fun onMeasure(widthSpec: Int, heightSpec: Int) {
val boundedHeightSpec = if (maxHeight > 0) {
MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST)
} else {
heightSpec
}
super.onMeasure(widthSpec, boundedHeightSpec)
}

private fun enableFlexboxLayout() {
layoutManager = FlexboxLayoutManager(context)
val marginBetweenItems = resources.getDimensionPixelSize(org.odk.collect.androidshared.R.dimen.margin_standard)
addItemDecoration(FlexItemDecoration(marginBetweenItems))
}

private fun enableGridLayout(numColumns: Int) {
if (numColumns == 1) {
enableDivider()
}

layoutManager = GridLayoutManager(context, numColumns)
}

private fun enableDivider() {
val divider = DividerItemDecoration(context, DividerItemDecoration.VERTICAL)
val drawable = ContextCompat.getDrawable(context, R.drawable.inset_divider_64dp)
if (drawable != null) {
divider.setDrawable(drawable)
}
addItemDecoration(divider)
}

internal class FlexItemDecoration(private val margin: Int) : ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: State) {
outRect.bottom = margin
outRect.right = margin
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.odk.collect.android.widgets.interfaces.SelectChoiceLoader;
import org.odk.collect.android.widgets.utilities.QuestionFontSizeUtils;
import org.odk.collect.android.widgets.utilities.SearchQueryViewModel;
import org.odk.collect.androidshared.utils.ScreenUtils;

import static org.odk.collect.android.formentry.media.FormMediaUtils.getPlayableAudioURI;

Expand All @@ -41,7 +42,11 @@ public BaseSelectListWidget(Context context, QuestionDetails questionDetails, Se
items = ItemsWidgetUtils.loadItemsAndHandleErrors(this, questionDetails.getPrompt(), selectChoiceLoader);

logAnalytics(questionDetails);
binding.choicesRecyclerView.initRecyclerView(setUpAdapter(), Appearances.isFlexAppearance(getQuestionDetails().getPrompt()));
// Only let the list take up 90% of the screen height in order to speed up loading if there
// are many items, and so that when shown inline in a field-list group the user can still
// scroll to the questions below it.
Comment thread
grzesiek2010 marked this conversation as resolved.
Outdated
int maxHeight = (int) (ScreenUtils.getScreenHeight(getContext()) * 0.9);
binding.choicesRecyclerView.initRecyclerView(setUpAdapter(), Appearances.isFlexAppearance(getQuestionDetails().getPrompt()), maxHeight);
if (Appearances.isAutocomplete(getQuestionDetails().getPrompt())) {
setUpSearchBox();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,7 @@ private boolean isButtonItemSelected(int index) {
}

private void initRecyclerView(AbstractSelectListAdapter adapter, boolean isFlex) {
recyclerView.initRecyclerView(adapter, isFlex);
recyclerView.initRecyclerView(adapter, isFlex, 0);
RobolectricHelpers.runLooper();
}

Expand Down