From 29972f9602c07e3eb4d5f16d57ccc86c9b38bf32 Mon Sep 17 00:00:00 2001 From: Emily Janzer Date: Tue, 27 Oct 2020 14:55:38 -0700 Subject: [PATCH] Set color filter so that the arrow matches the text color Summary: We support setting the text color in the ReactPicker component, but we don't apply the text color to the little arrow icon that appears next to it. This diff applies the color tint from the picker's primary text color (set with a style prop on the main picker component, *not* the 'color' prop on the Picker.Item) to the background of the picker, which tints the arrow icon. Reviewed By: makovkastar Differential Revision: D24480642 fbshipit-source-id: 7ce84d616ae677da8975be9444428392020c57dc --- .../AndroidDropdownPickerManagerDelegate.java | 21 +++++++++++-------- .../picker/ReactDropdownPickerManager.java | 6 ++++++ .../react/views/picker/ReactPicker.java | 3 +++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDropdownPickerManagerDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDropdownPickerManagerDelegate.java index 33d27bb5f28..c14ce248b59 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDropdownPickerManagerDelegate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDropdownPickerManagerDelegate.java @@ -1,12 +1,11 @@ /** -* Copyright (c) Facebook, Inc. and its affiliates. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -* -* @generated by codegen project: GeneratePropsJavaDelegate.js -*/ - + * Copyright (c) Facebook, Inc. and its affiliates. + * + *

This source code is licensed under the MIT license found in the LICENSE file in the root + * directory of this source tree. + * + * @generated by codegen project: GeneratePropsJavaDelegate.js + */ package com.facebook.react.viewmanagers; import android.view.View; @@ -16,10 +15,14 @@ import com.facebook.react.uimanager.BaseViewManagerDelegate; import com.facebook.react.uimanager.BaseViewManagerInterface; import com.facebook.react.uimanager.LayoutShadowNode; -public class AndroidDropdownPickerManagerDelegate & AndroidDropdownPickerManagerInterface> extends BaseViewManagerDelegate { +public class AndroidDropdownPickerManagerDelegate< + T extends View, + U extends BaseViewManagerInterface & AndroidDropdownPickerManagerInterface> + extends BaseViewManagerDelegate { public AndroidDropdownPickerManagerDelegate(U viewManager) { super(viewManager); } + @Override public void setProperty(T view, String propName, @Nullable Object value) { switch (propName) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactDropdownPickerManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactDropdownPickerManager.java index 23f4163cb74..04b3f3d341d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactDropdownPickerManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactDropdownPickerManager.java @@ -8,6 +8,7 @@ package com.facebook.react.views.picker; import android.widget.Spinner; +import androidx.annotation.NonNull; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.ViewManagerDelegate; @@ -41,4 +42,9 @@ public class ReactDropdownPickerManager extends ReactPickerManager protected ViewManagerDelegate getDelegate() { return mDelegate; } + + @Override + public void setBackgroundColor(@NonNull ReactPicker view, int backgroundColor) { + view.setStagedBackgroundColor(backgroundColor); + } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPicker.java b/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPicker.java index c629f26a461..8eff2dd4f7b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPicker.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPicker.java @@ -8,12 +8,14 @@ package com.facebook.react.views.picker; import android.content.Context; +import android.content.res.ColorStateList; import android.util.AttributeSet; import android.view.View; import android.widget.AdapterView; import android.widget.Spinner; import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatSpinner; +import androidx.core.view.ViewCompat; import com.facebook.react.common.annotations.VisibleForTesting; import java.util.List; @@ -173,6 +175,7 @@ public class ReactPicker extends AppCompatSpinner { && adapter != null && mStagedPrimaryTextColor != adapter.getPrimaryTextColor()) { adapter.setPrimaryTextColor(mStagedPrimaryTextColor); + ViewCompat.setBackgroundTintList(this, ColorStateList.valueOf(mStagedPrimaryTextColor)); mStagedPrimaryTextColor = null; }