From 88c9492cbb23e434d32c38c2a493b57a8ebdeb05 Mon Sep 17 00:00:00 2001 From: miaboloix Date: Wed, 5 Aug 2020 12:38:28 -0400 Subject: [PATCH] Translated StateAssemblerMarginBindingAdapters --- .../StateAssemblerMarginBindingAdapters.java | 107 ++++++++++++++++++ .../StateAssemblerMarginBindingAdapters.kt | 105 ----------------- .../RecyclerViewBindingAdapter.kt | 58 ---------- 3 files changed, 107 insertions(+), 163 deletions(-) create mode 100644 app/src/main/java/org/oppia/app/databinding/StateAssemblerMarginBindingAdapters.java delete mode 100644 app/src/main/java/org/oppia/app/databinding/StateAssemblerMarginBindingAdapters.kt delete mode 100644 app/src/main/java/org/oppia/app/recyclerview/RecyclerViewBindingAdapter.kt diff --git a/app/src/main/java/org/oppia/app/databinding/StateAssemblerMarginBindingAdapters.java b/app/src/main/java/org/oppia/app/databinding/StateAssemblerMarginBindingAdapters.java new file mode 100644 index 00000000000..3ddbb8d7100 --- /dev/null +++ b/app/src/main/java/org/oppia/app/databinding/StateAssemblerMarginBindingAdapters.java @@ -0,0 +1,107 @@ +package org.oppia.app.databinding; + +import android.view.View; +import android.view.ViewGroup.MarginLayoutParams; +import androidx.databinding.BindingAdapter; + +public class StateAssemblerMarginBindingAdapters { + /** Used to set a margin for exploration split-view. */ + @BindingAdapter( + "app:explorationSplitViewMarginApplicable", + "app:explorationSplitViewMarginStart", + "app:explorationSplitViewMarginTop", + "app:explorationSplitViewMarginEnd", + "app:explorationSplitViewMarginBottom", + requireAll = false + ) + public static void setExplorationSplitViewMargin( + View view, + Boolean isApplicable, + Float marginStart, + Float marginTop, + Float marginEnd, + Float marginBottom + ) { + setMarginIfApplicable(view, isApplicable, marginStart, marginTop, marginEnd, marginBottom); + } + + /** Used to set a margin for exploration view. */ + @BindingAdapter( + "app:explorationViewMarginApplicable", + "app:explorationViewMarginStart", + "app:explorationViewMarginTop", + "app:explorationViewMarginEnd", + "app:explorationViewMarginBottom", + requireAll = false + ) + public static void setExplorationViewMargin( + View view, + Boolean isApplicable, + Float marginStart, + Float marginTop, + Float marginEnd, + Float marginBottom + ) { + setMarginIfApplicable(view, isApplicable, marginStart, marginTop, marginEnd, marginBottom); + } + + /** Used to set a margin for question view. */ + @BindingAdapter( + "app:questionViewMarginApplicable", + "app:questionViewMarginStart", + "app:questionViewMarginTop", + "app:questionViewMarginEnd", + "app:questionViewMarginBottom", + requireAll = false + ) + public static void setQuestionViewMargin( + View view, + Boolean isApplicable, + Float marginStart, + Float marginTop, + Float marginEnd, + Float marginBottom + ) { + setMarginIfApplicable(view, isApplicable, marginStart, marginTop, marginEnd, marginBottom); + } + + /** Used to set a margin for question split-view. */ + @BindingAdapter( + "app:questionSplitViewMarginApplicable", + "app:questionSplitViewMarginStart", + "app:questionSplitViewMarginTop", + "app:questionSplitViewMarginEnd", + "app:questionSplitViewMarginBottom", + requireAll = false + ) + public static void setQuestionSplitViewMargin( + View view, + Boolean isApplicable, + Float marginStart, + Float marginTop, + Float marginEnd, + Float marginBottom + ) { + setMarginIfApplicable(view, isApplicable, marginStart, marginTop, marginEnd, marginBottom); + } + + private static void setMarginIfApplicable( + View view, + Boolean isApplicable, + Float marginStart, + Float marginTop, + Float marginEnd, + Float marginBottom + ) { + if (isApplicable && view.getLayoutParams() instanceof MarginLayoutParams) { + MarginLayoutParams params = (MarginLayoutParams) view.getLayoutParams(); + params.setMargins( + marginStart.intValue(), + marginTop.intValue(), + marginEnd.intValue(), + marginBottom.intValue() + ); + view.requestLayout(); + } + } +} diff --git a/app/src/main/java/org/oppia/app/databinding/StateAssemblerMarginBindingAdapters.kt b/app/src/main/java/org/oppia/app/databinding/StateAssemblerMarginBindingAdapters.kt deleted file mode 100644 index f527555ce4c..00000000000 --- a/app/src/main/java/org/oppia/app/databinding/StateAssemblerMarginBindingAdapters.kt +++ /dev/null @@ -1,105 +0,0 @@ -package org.oppia.app.databinding - -import android.view.View -import android.view.ViewGroup.MarginLayoutParams -import androidx.databinding.BindingAdapter - -/** Used to set a margin for exploration split-view. */ -@BindingAdapter( - "app:explorationSplitViewMarginApplicable", - "app:explorationSplitViewMarginStart", - "app:explorationSplitViewMarginTop", - "app:explorationSplitViewMarginEnd", - "app:explorationSplitViewMarginBottom", - requireAll = false -) -fun setExplorationSplitViewMargin( - view: View, - isApplicable: Boolean, - marginStart: Float, - marginTop: Float, - marginEnd: Float, - marginBottom: Float -) { - setMarginIfApplicable(view, isApplicable, marginStart, marginTop, marginEnd, marginBottom) -} - -/** Used to set a margin for exploration view. */ -@BindingAdapter( - "app:explorationViewMarginApplicable", - "app:explorationViewMarginStart", - "app:explorationViewMarginTop", - "app:explorationViewMarginEnd", - "app:explorationViewMarginBottom", - requireAll = false -) -fun setExplorationViewMargin( - view: View, - isApplicable: Boolean, - marginStart: Float, - marginTop: Float, - marginEnd: Float, - marginBottom: Float -) { - setMarginIfApplicable(view, isApplicable, marginStart, marginTop, marginEnd, marginBottom) -} - -/** Used to set a margin for question view. */ -@BindingAdapter( - "app:questionViewMarginApplicable", - "app:questionViewMarginStart", - "app:questionViewMarginTop", - "app:questionViewMarginEnd", - "app:questionViewMarginBottom", - requireAll = false -) -fun setQuestionViewMargin( - view: View, - isApplicable: Boolean, - marginStart: Float, - marginTop: Float, - marginEnd: Float, - marginBottom: Float -) { - setMarginIfApplicable(view, isApplicable, marginStart, marginTop, marginEnd, marginBottom) -} - -/** Used to set a margin for question split-view. */ -@BindingAdapter( - "app:questionSplitViewMarginApplicable", - "app:questionSplitViewMarginStart", - "app:questionSplitViewMarginTop", - "app:questionSplitViewMarginEnd", - "app:questionSplitViewMarginBottom", - requireAll = false -) -fun setQuestionSplitViewMargin( - view: View, - isApplicable: Boolean, - marginStart: Float, - marginTop: Float, - marginEnd: Float, - marginBottom: Float -) { - setMarginIfApplicable(view, isApplicable, marginStart, marginTop, marginEnd, marginBottom) -} - -private fun setMarginIfApplicable( - view: View, - isApplicable: Boolean, - marginStart: Float, - marginTop: Float, - marginEnd: Float, - marginBottom: Float -) { - if (isApplicable && view.layoutParams is MarginLayoutParams) { - val params = view.layoutParams as MarginLayoutParams - params.setMargins( - marginStart.toInt(), - marginTop.toInt(), - marginEnd.toInt(), - marginBottom.toInt() - ) - view.requestLayout() - } -} diff --git a/app/src/main/java/org/oppia/app/recyclerview/RecyclerViewBindingAdapter.kt b/app/src/main/java/org/oppia/app/recyclerview/RecyclerViewBindingAdapter.kt deleted file mode 100644 index 213aff478ae..00000000000 --- a/app/src/main/java/org/oppia/app/recyclerview/RecyclerViewBindingAdapter.kt +++ /dev/null @@ -1,58 +0,0 @@ -package org.oppia.app.recyclerview - -import android.graphics.drawable.Drawable -import androidx.databinding.BindingAdapter -import androidx.databinding.ObservableList -import androidx.lifecycle.LiveData -import androidx.recyclerview.widget.RecyclerView - -/** - * Binds the specified generic data to the adapter of the [RecyclerView]. This is called by - * Android's data binding framework and should not be used directly. For reference: - * https://android.jlelse.eu/1bd08b4796b4. - */ -@BindingAdapter("data") -fun bindToRecyclerViewAdapterWithLiveData( - recyclerView: RecyclerView, - liveData: LiveData> -) { - liveData.value?.let { data -> - bindToRecyclerViewAdapter(recyclerView, data) - } -} - -/** - * Binds the specified generic data to the adapter of the [RecyclerView]. This is called by - * Android's data binding framework and should not be used directly. For reference: - * https://android.jlelse.eu/1bd08b4796b4. - */ -@BindingAdapter("list") -fun bindToRecyclerViewAdapterWithoutLiveData( - recyclerView: RecyclerView, - itemList: List? // Nullable inorder to work with optional binding of submitted answer view -) { - if (!itemList.isNullOrEmpty()) - bindToRecyclerViewAdapter(recyclerView, itemList) -} - -/** A variant of [bindToRecyclerViewAdapterWithLiveData] that instead uses an observable list. */ -@BindingAdapter("data") -fun bindToRecyclerViewAdapterWithObservableList( - recyclerView: RecyclerView, - dataList: ObservableList -) { - bindToRecyclerViewAdapter(recyclerView, dataList) -} - -private fun bindToRecyclerViewAdapter(recyclerView: RecyclerView, dataList: List) { - val adapter = recyclerView.adapter - checkNotNull(adapter) { "Cannot bind data to a RecyclerView missing its adapter." } - check(adapter is BindableAdapter<*>) { "Can only bind data to a BindableAdapter." } - adapter.setDataUnchecked(dataList) -} - -@BindingAdapter("itemDecorator") -fun addItemDecorator(recyclerView: RecyclerView, drawable: Drawable) { - val decorator = DividerItemDecorator(drawable) - recyclerView.addItemDecoration(decorator) -}