Skip to content

Commit 7edd21a

Browse files
authored
fix(android): dialogs activity usage (NativeScript#10246)
1 parent 95f3772 commit 7edd21a

File tree

7 files changed

+69
-16
lines changed

7 files changed

+69
-16
lines changed

apps/toolbox/src/main-page.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<Button text="box-shadow" tap="{{ viewDemo }}" class="btn btn-primary btn-view-demo" />
1111
<Button text="css-playground" tap="{{ viewDemo }}" class="btn btn-primary btn-view-demo" />
1212
<Button text="datepicker" tap="{{ viewDemo }}" class="btn btn-primary btn-view-demo" />
13+
<Button text="dialogs" tap="{{ viewDemo }}" class="btn btn-primary btn-view-demo" />
1314
<Button text="forms" tap="{{ viewDemo }}" class="btn btn-primary btn-view-demo" />
1415
<Button text="image-async" tap="{{ viewDemo }}" class="btn btn-primary btn-view-demo" />
1516
<Button text="image-handling" tap="{{ viewDemo }}" class="btn btn-primary btn-view-demo" />

apps/toolbox/src/pages/a11y.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
<TextView testID="testTextView" hint="TextView" text="{{switchCheckedText}}" class="view-item a11y" accessibilityLabel="TestView with a value" accessibilityLiveRegion="{{accessibilityLiveRegions.Polite}}" />
2626
<TextField testID="testTextField" hint="TextField" class="view-item a11y" accessibilityLabel="Plain jane TextField" accessibilityHint="Tell us your real name Jane" />
2727
<TextView hint="TextView" class="view-item a11y" accessibilityLabel="Nice TextView" accessibilityHint="Tell us about yourself Jane" />
28-
<GridLayout testID="testGridLayout1" rows="25" columns="*" class="view-item" accessibilityLabel="No can go GridLayout" accessibilityHint="A grid that will not get bigger when increasing accessible text size">
28+
<GridLayout testID="testGridLayout1" rows="35" columns="*" class="view-item" accessibilityLabel="No can go GridLayout" accessibilityHint="A grid that will not get bigger when increasing accessible text size">
2929
<Label text="IN-Accessible Grid" class="view-item text-center" />
3030
</GridLayout>
31-
<GridLayout rows="25,25" columns="*,50" class="view-item a11y" accessibilityLabel="Yes an accessible GridLayout" accessibilityHint="A grid that WILL get bigger dynamically when increasing accessible text size">
31+
<GridLayout rows="35,35" columns="*,50" class="view-item a11y" accessibilityLabel="Yes an accessible GridLayout" accessibilityHint="A grid that WILL get bigger dynamically when increasing accessible text size">
3232
<Label text="Accessible Grid" class="view-item text-center" />
3333
<Label row="1" text="With another item in a row" class="view-item text-center" />
3434
<Label rowSpan="2" col="1" text="Hi" />

apps/toolbox/src/pages/dialogs.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { Page, Observable, EventData, Dialogs } from '@nativescript/core';
2+
3+
let page: Page;
4+
5+
export function navigatingTo(args: EventData) {
6+
page = <Page>args.object;
7+
page.bindingContext = new SampleData();
8+
}
9+
10+
export class SampleData extends Observable {
11+
dialogAlert() {
12+
Dialogs.alert('Hello');
13+
}
14+
dialogAlertWithOptions() {
15+
Dialogs.alert({
16+
title: 'Hello',
17+
message: 'Oh hi!',
18+
okButtonText: 'Nice',
19+
});
20+
}
21+
dialogConfirm() {
22+
Dialogs.confirm('Is it?').then((ok) => {
23+
Dialogs.alert('Ok then!');
24+
});
25+
}
26+
27+
dialogLogin() {
28+
Dialogs.login('Login').then((result) => {
29+
console.log(result);
30+
});
31+
}
32+
dialogAction() {
33+
Dialogs.action('Actions', 'Cancel', ['Test', 'Testing']).then((result) => {
34+
console.log(result);
35+
});
36+
}
37+
}

apps/toolbox/src/pages/dialogs.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo" class="page">
2+
<Page.actionBar>
3+
<ActionBar title="Dialogs" class="action-bar">
4+
</ActionBar>
5+
</Page.actionBar>
6+
<ScrollView>
7+
<StackLayout padding="20">
8+
<Button tap="{{dialogAlert}}" text="Alert" />
9+
<Button tap="{{dialogAlertWithOptions}}" text="Alert with Options" />
10+
<Button tap="{{dialogConfirm}}" text="Confirm" />
11+
<Button tap="{{dialogLogin}}" text="Login" />
12+
<Button tap="{{dialogAction}}" text="Actions" />
13+
14+
</StackLayout>
15+
</ScrollView>
16+
</Page>

packages/core/ui/dialogs/index.android.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*/
44
import { DialogOptions, ConfirmOptions, PromptOptions, PromptResult, LoginOptions, LoginResult, ActionOptions } from './dialogs-common';
55
import { getLabelColor, getButtonColors, isDialogOptions, inputType, capitalizationType, DialogStrings, parseLoginOptions } from './dialogs-common';
6-
import { android as androidApp } from '../../application';
6+
import { ad } from '../../utils/native-helper';
77

88
export * from './dialogs-common';
99

@@ -12,7 +12,7 @@ function isString(value): value is string {
1212
}
1313

1414
function createAlertDialog(options?: DialogOptions): android.app.AlertDialog.Builder {
15-
const alert = new android.app.AlertDialog.Builder(androidApp.foregroundActivity, options.theme ? options.theme : -1);
15+
const alert = new android.app.AlertDialog.Builder(ad.getCurrentActivity(), options.theme ? options.theme : -1);
1616
alert.setTitle(options && isString(options.title) ? options.title : '');
1717
alert.setMessage(options && isString(options.message) ? options.message : '');
1818
if (options && options.cancelable === false) {
@@ -202,7 +202,7 @@ export function prompt(...args): Promise<PromptResult> {
202202
try {
203203
const alert = createAlertDialog(options);
204204

205-
const input = new android.widget.EditText(androidApp.foregroundActivity);
205+
const input = new android.widget.EditText(ad.getCurrentActivity());
206206

207207
if (options) {
208208
if (options.inputType === inputType.password) {
@@ -257,23 +257,21 @@ export function login(...args: any[]): Promise<LoginResult> {
257257

258258
return new Promise<LoginResult>((resolve, reject) => {
259259
try {
260-
const context = androidApp.foregroundActivity;
261-
262260
const alert = createAlertDialog(options);
263261

264-
const userNameInput = new android.widget.EditText(context);
262+
const userNameInput = new android.widget.EditText(ad.getApplicationContext());
265263

266264
userNameInput.setHint(options.userNameHint ? options.userNameHint : '');
267265
userNameInput.setText(options.userName ? options.userName : '');
268266

269-
const passwordInput = new android.widget.EditText(context);
267+
const passwordInput = new android.widget.EditText(ad.getApplicationContext());
270268
passwordInput.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD);
271269
passwordInput.setTypeface(android.graphics.Typeface.DEFAULT);
272270

273271
passwordInput.setHint(options.passwordHint ? options.passwordHint : '');
274272
passwordInput.setText(options.password ? options.password : '');
275273

276-
const layout = new android.widget.LinearLayout(context);
274+
const layout = new android.widget.LinearLayout(ad.getApplicationContext());
277275
layout.setOrientation(1);
278276
layout.addView(userNameInput);
279277
layout.addView(passwordInput);
@@ -324,8 +322,7 @@ export function action(...args): Promise<string> {
324322

325323
return new Promise<string>((resolve, reject) => {
326324
try {
327-
const activity = androidApp.foregroundActivity || androidApp.startActivity;
328-
const alert = new android.app.AlertDialog.Builder(activity, options.theme ? options.theme : -1);
325+
const alert = new android.app.AlertDialog.Builder(ad.getCurrentActivity(), options.theme ? options.theme : -1);
329326
const message = options && isString(options.message) ? options.message : '';
330327
const title = options && isString(options.title) ? options.title : '';
331328
if (options && options.cancelable === false) {

packages/core/ui/frame/index.android.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { Device } from '../../platform';
2121
import { profile } from '../../profiling';
2222
import { android as androidApplication } from '../../application';
2323
import { setSuspended } from '../../application/application-common';
24+
import { ad } from '../../utils/native-helper';
2425

2526
export * from './frame-common';
2627

@@ -94,7 +95,7 @@ export class Frame extends FrameBase {
9495
}
9596

9697
public static reloadPage(context?: ModuleContext): void {
97-
const activity = application.android.foregroundActivity;
98+
const activity = ad.getCurrentActivity();
9899
const callbacks: AndroidActivityCallbacks = activity[CALLBACKS];
99100
if (callbacks) {
100101
const rootView: View = callbacks.getRootView();
@@ -147,7 +148,8 @@ export class Frame extends FrameBase {
147148

148149
// _onAttachedToWindow called from OS again after it was detach
149150
// still happens with androidx.fragment:1.3.2
150-
const lifecycleState = (androidApplication.foregroundActivity?.getLifecycle?.() || androidApplication.startActivity?.getLifecycle?.())?.getCurrentState() || androidx.lifecycle.Lifecycle.State.CREATED;
151+
const activity = ad.getCurrentActivity();
152+
const lifecycleState = activity?.getLifecycle?.()?.getCurrentState() || androidx.lifecycle.Lifecycle.State.CREATED;
151153
if ((this._manager && this._manager.isDestroyed()) || !lifecycleState.isAtLeast(androidx.lifecycle.Lifecycle.State.CREATED)) {
152154
return;
153155
}

packages/core/utils/mainthread-helper.android.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { android as ad } from '../application';
1+
import { ad } from './native-helper';
22

33
export function dispatchToMainThread(func: () => void) {
44
const runOnMainThread = (global as any).__runOnMainThread;
@@ -20,7 +20,7 @@ export function isMainThread(): boolean {
2020
}
2121

2222
export function dispatchToUIThread(func: () => void) {
23-
const activity: androidx.appcompat.app.AppCompatActivity = ad.foregroundActivity || ad.startActivity;
23+
const activity: androidx.appcompat.app.AppCompatActivity = ad.getCurrentActivity();
2424
if (activity && func) {
2525
activity.runOnUiThread(
2626
new java.lang.Runnable({

0 commit comments

Comments
 (0)