summaryrefslogtreecommitdiff
path: root/main/src/com/google/android/setupdesign/template/RecyclerMixin.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/com/google/android/setupdesign/template/RecyclerMixin.java')
-rw-r--r--main/src/com/google/android/setupdesign/template/RecyclerMixin.java54
1 files changed, 49 insertions, 5 deletions
diff --git a/main/src/com/google/android/setupdesign/template/RecyclerMixin.java b/main/src/com/google/android/setupdesign/template/RecyclerMixin.java
index 11e9144..b327060 100644
--- a/main/src/com/google/android/setupdesign/template/RecyclerMixin.java
+++ b/main/src/com/google/android/setupdesign/template/RecyclerMixin.java
@@ -21,15 +21,17 @@ import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Build.VERSION_CODES;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.Adapter;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import android.util.AttributeSet;
import android.view.View;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import com.google.android.setupcompat.internal.TemplateLayout;
+import com.google.android.setupcompat.partnerconfig.PartnerConfig;
+import com.google.android.setupcompat.partnerconfig.PartnerConfigHelper;
import com.google.android.setupcompat.template.Mixin;
import com.google.android.setupdesign.DividerItemDecoration;
import com.google.android.setupdesign.GlifLayout;
@@ -38,6 +40,7 @@ import com.google.android.setupdesign.items.ItemHierarchy;
import com.google.android.setupdesign.items.ItemInflater;
import com.google.android.setupdesign.items.RecyclerItemAdapter;
import com.google.android.setupdesign.util.DrawableLayoutDirectionHelper;
+import com.google.android.setupdesign.util.PartnerStyleHelper;
import com.google.android.setupdesign.view.HeaderRecyclerView;
import com.google.android.setupdesign.view.HeaderRecyclerView.HeaderAdapter;
@@ -64,6 +67,7 @@ public class RecyclerMixin implements Mixin {
private int dividerInsetStart;
private int dividerInsetEnd;
+ private boolean isDividerDisplay = true;
/**
* Creates the RecyclerMixin. Unlike typical mixins which are created in the constructor, this
@@ -86,7 +90,22 @@ public class RecyclerMixin implements Mixin {
header = ((HeaderRecyclerView) recyclerView).getHeader();
}
- this.recyclerView.addItemDecoration(dividerDecoration);
+ isDividerDisplay = isShowItemsDivider();
+ if (isDividerDisplay) {
+ this.recyclerView.addItemDecoration(dividerDecoration);
+ }
+ }
+
+ private boolean isShowItemsDivider() {
+ // Skips to add item decoration if config flag is false.
+ if (PartnerStyleHelper.shouldApplyPartnerResource(templateLayout)) {
+ if (PartnerConfigHelper.get(recyclerView.getContext())
+ .isPartnerConfigAvailable(PartnerConfig.CONFIG_ITEMS_DIVIDER_SHOWN)) {
+ return PartnerConfigHelper.get(recyclerView.getContext())
+ .getBoolean(recyclerView.getContext(), PartnerConfig.CONFIG_ITEMS_DIVIDER_SHOWN, true);
+ }
+ }
+ return true;
}
/**
@@ -108,16 +127,24 @@ public class RecyclerMixin implements Mixin {
final ItemHierarchy inflated = new ItemInflater(context).inflate(entries);
boolean applyPartnerHeavyThemeResource = false;
+ boolean useFullDynamicColor = false;
if (templateLayout instanceof GlifLayout) {
applyPartnerHeavyThemeResource =
((GlifLayout) templateLayout).shouldApplyPartnerHeavyThemeResource();
+ useFullDynamicColor = ((GlifLayout) templateLayout).useFullDynamicColor();
}
final RecyclerItemAdapter adapter =
- new RecyclerItemAdapter(inflated, applyPartnerHeavyThemeResource);
+ new RecyclerItemAdapter(inflated, applyPartnerHeavyThemeResource, useFullDynamicColor);
adapter.setHasStableIds(a.getBoolean(R.styleable.SudRecyclerMixin_sudHasStableIds, false));
setAdapter(adapter);
}
+
+ if (!isDividerDisplay) {
+ a.recycle();
+ return;
+ }
+
int dividerInset = a.getDimensionPixelSize(R.styleable.SudRecyclerMixin_sudDividerInset, -1);
if (dividerInset != -1) {
setDividerInset(dividerInset);
@@ -126,6 +153,23 @@ public class RecyclerMixin implements Mixin {
a.getDimensionPixelSize(R.styleable.SudRecyclerMixin_sudDividerInsetStart, 0);
int dividerInsetEnd =
a.getDimensionPixelSize(R.styleable.SudRecyclerMixin_sudDividerInsetEnd, 0);
+
+ if (PartnerStyleHelper.shouldApplyPartnerHeavyThemeResource(templateLayout)) {
+ if (PartnerConfigHelper.get(context)
+ .isPartnerConfigAvailable(PartnerConfig.CONFIG_LAYOUT_MARGIN_START)) {
+ dividerInsetStart =
+ (int)
+ PartnerConfigHelper.get(context)
+ .getDimension(context, PartnerConfig.CONFIG_LAYOUT_MARGIN_START);
+ }
+ if (PartnerConfigHelper.get(context)
+ .isPartnerConfigAvailable(PartnerConfig.CONFIG_LAYOUT_MARGIN_END)) {
+ dividerInsetEnd =
+ (int)
+ PartnerConfigHelper.get(context)
+ .getDimension(context, PartnerConfig.CONFIG_LAYOUT_MARGIN_END);
+ }
+ }
setDividerInsets(dividerInsetStart, dividerInsetEnd);
}
@@ -172,7 +216,7 @@ public class RecyclerMixin implements Mixin {
* @return The adapter, or {@code null} if the recycler view has no adapter.
*/
public Adapter<? extends ViewHolder> getAdapter() {
- @SuppressWarnings("unchecked") // RecyclerView.getAdapter returns raw type :(
+ // RecyclerView.getAdapter returns raw type :(
final RecyclerView.Adapter<? extends ViewHolder> adapter = recyclerView.getAdapter();
if (adapter instanceof HeaderAdapter) {
return ((HeaderAdapter<? extends ViewHolder>) adapter).getWrappedAdapter();