@akylas/nativescript-inappbrowser
Version:
InAppBrowser for NativeScript
106 lines • 3.94 kB
JavaScript
import { Utils, Application, AndroidApplication } from '@nativescript/core';
import { BROWSER_TYPES } from './InAppBrowser.common';
export let CustomTabsClient;
export const ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
export const ARROW_BACK_BLACK = 'ic_arrow_back_black';
export const ARROW_BACK_WHITE = 'ic_arrow_back_white';
export const DISMISSED_EVENT = 'DismissedEvent';
let ColorUtils;
let _redirectHandler;
let initialUrl = '';
export const getDrawableId = Utils.ad.resources.getDrawableId;
export function getInitialURL(activity) {
if (activity) {
const intent = activity.getIntent();
const action = intent.getAction();
const uri = intent.getData();
if (uri !== null && (android.content.Intent.ACTION_VIEW === action ||
'android.nfc.action.NDEF_DISCOVERED' === action)) {
const url = '' + uri;
if (url === initialUrl)
return null;
initialUrl = url;
return url;
}
}
return null;
}
function waitForRedirectAsync(returnUrl) {
return new Promise(resolve => {
_redirectHandler = (args) => {
const url = getInitialURL(args.android);
if (url && url.startsWith(returnUrl)) {
resolve({ url: url, type: BROWSER_TYPES.SUCCESS });
}
};
Application.on(Application.resumeEvent, _redirectHandler);
});
}
function handleAppStateActiveOnce() {
return new Promise(function (resolve) {
if (!Application.android.paused) {
const activity = Application.android.foregroundActivity || Application.android.startActivity;
return resolve(activity);
}
Application.android.once(AndroidApplication.activityResumedEvent, function (args) {
resolve(args.activity);
});
});
}
async function checkResultAndReturnUrl(returnUrl, result) {
if (Application.android && result.type !== BROWSER_TYPES.CANCEL) {
try {
const activity = await handleAppStateActiveOnce();
const url = getInitialURL(activity);
return url && url.startsWith(returnUrl)
? { url: url, type: BROWSER_TYPES.SUCCESS }
: result;
}
catch (error) {
return result;
}
}
return result;
}
export function openAuthSessionPolyfillAsync(open, startUrl, returnUrl, options) {
return Promise.race([
waitForRedirectAsync(returnUrl),
open(startUrl, options).then(function (result) {
return checkResultAndReturnUrl(returnUrl, result);
})
]);
}
export function closeAuthSessionPolyfillAsync() {
if (_redirectHandler) {
Application.off(Application.resumeEvent, _redirectHandler);
_redirectHandler = null;
}
}
export function getPreferredPackages(context) {
const serviceIntent = new android.content.Intent(ACTION_CUSTOM_TABS_CONNECTION);
const resolveInfos = context.getPackageManager().queryIntentServices(serviceIntent, 0);
return resolveInfos;
}
export function toolbarIsLight(themeColor) {
if (!ColorUtils) {
ColorUtils = androidx.core.graphics.ColorUtils;
}
return ColorUtils.calculateLuminance(themeColor) > 0.5;
}
export function getDefaultBrowser(context) {
const resolveInfos = getPreferredPackages(context);
if (!CustomTabsClient) {
CustomTabsClient = androidx.browser.customtabs.CustomTabsClient;
}
const packageName = CustomTabsClient.getPackageName(context, java.util.Arrays.asList([
"com.android.chrome",
"com.chrome.beta",
"com.chrome.dev",
"com.google.android.apps.chrome"
]));
if (packageName == null && resolveInfos != null && resolveInfos.size() > 0) {
return resolveInfos.get(0).serviceInfo.packageName;
}
return packageName;
}
//# sourceMappingURL=utils.android.js.map