From 742ee91c0af5ea7ae467e5643d49d509eb169a47 Mon Sep 17 00:00:00 2001 From: Sergey Volkov Date: Tue, 8 Feb 2022 13:20:59 +0300 Subject: [PATCH 1/4] fix(android): crash in ListView on API 21 default listDivider on API 21 is instance of NinePatchDrawable, not a GradientDrawable fix #13261 --- .../java/ti/modules/titanium/ui/widget/TiUIListView.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIListView.java b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIListView.java index 4724f57f9b3..6941e92eb07 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIListView.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIListView.java @@ -8,6 +8,7 @@ import android.content.Context; import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.view.View; import android.view.ViewGroup; @@ -227,10 +228,12 @@ private void processProperty(String name, Object value) } else { final TypedArray divider = context.obtainStyledAttributes(new int[] { android.R.attr.listDivider }); - final GradientDrawable defaultDrawable = (GradientDrawable) divider.getDrawable(0); + final Drawable defaultDrawable = divider.getDrawable(0); // Set platform default separator. - defaultDrawable.setSize(0, height); + if (defaultDrawable instanceof GradientDrawable) { + ((GradientDrawable) defaultDrawable).setSize(0, height); + } this.listView.setSeparator(defaultDrawable); divider.recycle(); } From 27ab32815f54be7c10119dfa24fe8529b159a8d9 Mon Sep 17 00:00:00 2001 From: Sergey Volkov Date: Tue, 8 Feb 2022 14:12:45 +0300 Subject: [PATCH 2/4] fix(android): hide default separator when separatorStyle is SEPARATOR_STYLE_NONE --- .../src/java/ti/modules/titanium/ui/widget/TiUIListView.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIListView.java b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIListView.java index 6941e92eb07..152b2568a83 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIListView.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIListView.java @@ -215,7 +215,9 @@ private void processProperty(String name, Object value) ? TiConvert.toTiDimension(heightString, TiDimension.TYPE_HEIGHT) .getAsPixels((View) getNativeView().getParent()) : 0; - if (name.equals(TiC.PROPERTY_SEPARATOR_COLOR) + if (height == 0) { + this.listView.setSeparator(0, height); + } else if (name.equals(TiC.PROPERTY_SEPARATOR_COLOR) || properties.containsKey(TiC.PROPERTY_SEPARATOR_COLOR)) { String colorString = properties.getString(TiC.PROPERTY_SEPARATOR_COLOR); if (name.equals(TiC.PROPERTY_SEPARATOR_COLOR)) { From b42d7b76d8f1bfd9b30157408ea69f40b10f9658 Mon Sep 17 00:00:00 2001 From: Sergey Volkov Date: Tue, 8 Feb 2022 14:24:56 +0300 Subject: [PATCH 3/4] docs(api): fix ListView example --- apidoc/Titanium/UI/ListView.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apidoc/Titanium/UI/ListView.yml b/apidoc/Titanium/UI/ListView.yml index aa3307d842a..a35bd6f2ab8 100644 --- a/apidoc/Titanium/UI/ListView.yml +++ b/apidoc/Titanium/UI/ListView.yml @@ -1367,8 +1367,8 @@ examples: {properties: { title: 'Carrots'}}, {properties: { title: 'Potatoes'}}, ]; - sections.push(vegSection); var vegSection = Ti.UI.createListSection({ headerTitle: 'Vegetables', items: vegDataSet}); + sections.push(vegSection); listView.sections = sections; win.add(listView); From 2dbb2738e5a0b6f8b501ce9af59a293a80173b53 Mon Sep 17 00:00:00 2001 From: Sergey Volkov Date: Tue, 8 Feb 2022 14:32:30 +0300 Subject: [PATCH 4/4] docs(api): add warning about separatorHeight usage on Android API below 23 --- apidoc/Titanium/UI/ListView.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apidoc/Titanium/UI/ListView.yml b/apidoc/Titanium/UI/ListView.yml index a35bd6f2ab8..67864009075 100644 --- a/apidoc/Titanium/UI/ListView.yml +++ b/apidoc/Titanium/UI/ListView.yml @@ -758,6 +758,8 @@ properties: description: | Height of the ListView separator, in platform-specific units. If undefined, default native height will be used. Numerical inputs are treated as pixels. For example, 3 and "3px" are equivalent. + On Android API < 23 you must specify and + for this property to work. type: [String, Number] since: "4.1.0" platforms: [android]