UNPKG

@akylas/nativescript-inappbrowser

Version:
106 lines 3.94 kB
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