From 08502527eb25d074d5e29ede506f5fb88f47d088 Mon Sep 17 00:00:00 2001
From: DimitrisRK <55595100+DimitrisRK@users.noreply.github.com>
Date: Wed, 22 Jul 2020 23:46:05 +0300
Subject: [PATCH] fix(android): 'isEnabled' now works properly for SegmentedBar
(#8711)
---
e2e/ui-tests-app/app/main-page.ts | 2 +-
.../app/segmented-bar/android-enabled-page.ts | 5 +++++
.../segmented-bar/android-enabled-page.xml | 10 +++++++++
.../app/segmented-bar/clean-page.xml | 22 +++++++++----------
.../app/segmented-bar/main-page.ts | 19 ++++++++++++++++
.../app/segmented-bar/main-page.xml | 6 +++++
.../ui/segmented-bar/segmented-bar.android.ts | 21 +++++++++++++++++-
7 files changed, 72 insertions(+), 13 deletions(-)
create mode 100644 e2e/ui-tests-app/app/segmented-bar/android-enabled-page.ts
create mode 100644 e2e/ui-tests-app/app/segmented-bar/android-enabled-page.xml
create mode 100644 e2e/ui-tests-app/app/segmented-bar/main-page.ts
create mode 100644 e2e/ui-tests-app/app/segmented-bar/main-page.xml
diff --git a/e2e/ui-tests-app/app/main-page.ts b/e2e/ui-tests-app/app/main-page.ts
index f669befef..5edb9b5f2 100644
--- a/e2e/ui-tests-app/app/main-page.ts
+++ b/e2e/ui-tests-app/app/main-page.ts
@@ -29,7 +29,7 @@ export function pageLoaded(args: EventData) {
examples.set("page", "page/main-page");
examples.set("perf", "perf/main-page");
examples.set("scroll-view", "scroll-view/main-page");
- examples.set("segStyle", "segmented-bar/all-page");
+ examples.set("segmented-bar", "segmented-bar/main-page");
examples.set("search-bar", "search-bar/main-page");
examples.set("tab-view", "tab-view/main-page");
examples.set("timePicker", "time-picker/time-picker-page");
diff --git a/e2e/ui-tests-app/app/segmented-bar/android-enabled-page.ts b/e2e/ui-tests-app/app/segmented-bar/android-enabled-page.ts
new file mode 100644
index 000000000..4d8281a74
--- /dev/null
+++ b/e2e/ui-tests-app/app/segmented-bar/android-enabled-page.ts
@@ -0,0 +1,5 @@
+import * as frame from "tns-core-modules/ui/frame";
+
+export function navigate() {
+ frame.topmost().goBack();
+}
diff --git a/e2e/ui-tests-app/app/segmented-bar/android-enabled-page.xml b/e2e/ui-tests-app/app/segmented-bar/android-enabled-page.xml
new file mode 100644
index 000000000..ec095853d
--- /dev/null
+++ b/e2e/ui-tests-app/app/segmented-bar/android-enabled-page.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/e2e/ui-tests-app/app/segmented-bar/clean-page.xml b/e2e/ui-tests-app/app/segmented-bar/clean-page.xml
index cbf6318be..369f4cc67 100644
--- a/e2e/ui-tests-app/app/segmented-bar/clean-page.xml
+++ b/e2e/ui-tests-app/app/segmented-bar/clean-page.xml
@@ -1,12 +1,12 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/e2e/ui-tests-app/app/segmented-bar/main-page.ts b/e2e/ui-tests-app/app/segmented-bar/main-page.ts
new file mode 100644
index 000000000..96a3ec12f
--- /dev/null
+++ b/e2e/ui-tests-app/app/segmented-bar/main-page.ts
@@ -0,0 +1,19 @@
+import { EventData } from "tns-core-modules/data/observable";
+import { SubMainPageViewModel } from "../sub-main-page-view-model";
+import { WrapLayout } from "tns-core-modules/ui/layouts/wrap-layout";
+import { Page } from "tns-core-modules/ui/page";
+
+export function pageLoaded(args: EventData) {
+ const page = args.object;
+ const wrapLayout = page.getViewById("wrapLayoutWithExamples");
+ page.bindingContext = new SubMainPageViewModel(wrapLayout, loadExamples());
+}
+
+export function loadExamples() {
+ const examples = new Map();
+ examples.set("segStyle", "segmented-bar/all-page");
+ examples.set("clean", "segmented-bar/clean-page");
+ examples.set("android-enabled", "segmented-bar/android-enabled-page");
+
+ return examples;
+}
diff --git a/e2e/ui-tests-app/app/segmented-bar/main-page.xml b/e2e/ui-tests-app/app/segmented-bar/main-page.xml
new file mode 100644
index 000000000..79cc23991
--- /dev/null
+++ b/e2e/ui-tests-app/app/segmented-bar/main-page.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/nativescript-core/ui/segmented-bar/segmented-bar.android.ts b/nativescript-core/ui/segmented-bar/segmented-bar.android.ts
index 48d138f4a..80cf88eec 100644
--- a/nativescript-core/ui/segmented-bar/segmented-bar.android.ts
+++ b/nativescript-core/ui/segmented-bar/segmented-bar.android.ts
@@ -1,6 +1,6 @@
import { Font } from "../styling/font";
import {
- SegmentedBarItemBase, SegmentedBarBase, selectedIndexProperty, itemsProperty, selectedBackgroundColorProperty,
+ SegmentedBarItemBase, SegmentedBarBase, selectedIndexProperty, itemsProperty, isEnabledProperty, selectedBackgroundColorProperty,
colorProperty, fontInternalProperty, fontSizeProperty, Color, layout
} from "./segmented-bar-common";
@@ -30,6 +30,7 @@ let TabHost: TabHost;
let TabChangeListener: TabChangeListener;
let TabContentFactory: TabContentFactory;
+// TODO: All TabHost public methods become deprecated in API 30.
function initializeNativeClasses(): void {
if (TabChangeListener) {
return;
@@ -238,6 +239,17 @@ export class SegmentedBar extends SegmentedBarBase {
super.disposeNativeView();
}
+ public onLoaded() {
+ super.onLoaded();
+
+ // Can only be applied after view is loaded
+ const tabWidget = this.nativeViewProtected.getTabWidget();
+ if (tabWidget)
+ {
+ tabWidget.setEnabled(tabWidget.isEnabled());
+ }
+ }
+
private insertTab(tabItem: SegmentedBarItem, index: number): void {
const tabHost = this.nativeViewProtected;
const tab = tabHost.newTabSpec(index + "");
@@ -270,4 +282,11 @@ export class SegmentedBar extends SegmentedBarBase {
selectedIndexProperty.coerce(this);
}
+ [isEnabledProperty.setNative](value: boolean) {
+ const tabWidget = this.nativeViewProtected.getTabWidget();
+ if (tabWidget)
+ {
+ tabWidget.setEnabled(value);
+ }
+ }
}