react-native-acoustic-connect-beta
Version:
BETA: React native plugin for Acoustic Connect
224 lines (185 loc) • 7.98 kB
text/typescript
/********************************************************************************************
* Copyright (C) 2025 Acoustic, L.P. All rights reserved.
*
* NOTICE: This file contains material that is confidential and proprietary to
* Acoustic, L.P. and/or other developers. No license is granted under any intellectual or
* industrial property rights of Acoustic, L.P. except as may be provided in an agreement with
* Acoustic, L.P. Any unauthorized copying or distribution of content from this file is
* prohibited.
********************************************************************************************/
import { Alert } from 'react-native';
import DialogListener from './DialogListener';
import TLTRN from '../TLTRN';
/**
* Debug utility for dialog event tracking
* Helps identify issues with dialog event interception and logging
*/
export class DialogDebugger {
private static instance: DialogDebugger;
private isEnabled: boolean = false;
private originalAlert: typeof Alert.alert;
private constructor() {
this.originalAlert = Alert.alert;
}
static getInstance(): DialogDebugger {
if (!DialogDebugger.instance) {
DialogDebugger.instance = new DialogDebugger();
}
return DialogDebugger.instance;
}
/**
* Enable debug mode
*/
enable(): void {
this.isEnabled = true;
console.log('🔍 DialogDebugger: Debug mode enabled');
}
/**
* Disable debug mode
*/
disable(): void {
this.isEnabled = false;
console.log('🔍 DialogDebugger: Debug mode disabled');
}
/**
* Test the complete dialog event flow
*/
testDialogEventFlow(): void {
console.log('🔍 DialogDebugger: Testing dialog event flow...');
// Test 1: Check if DialogListener is working
this.testDialogListener();
// Test 2: Check if TLTRN methods are accessible
this.testTLTRNMethods();
// Test 3: Check if Alert.alert override is working
this.testAlertOverride();
// Test 4: Test native method calls
this.testNativeMethods();
}
/**
* Test DialogListener functionality
*/
private testDialogListener(): void {
console.log('🔍 DialogDebugger: Testing DialogListener...');
try {
const dialogListener = DialogListener.getInstance();
console.log('✅ DialogListener.getInstance() - SUCCESS');
// Test event listener
const unsubscribe = dialogListener.addEventListener((event) => {
console.log('🔍 DialogDebugger: DialogListener event received:', event);
});
console.log('✅ DialogListener.addEventListener() - SUCCESS');
// Test manual tracking
dialogListener.trackCustomDialogShow('test-dialog-id', 'Test Dialog', []);
console.log('✅ DialogListener.trackCustomDialogShow() - SUCCESS');
unsubscribe();
} catch (error) {
console.error('❌ DialogDebugger: DialogListener test failed:', error);
}
}
/**
* Test TLTRN methods
*/
private testTLTRNMethods(): void {
console.log('🔍 DialogDebugger: Testing TLTRN methods...');
try {
// Test if TLTRN methods exist
if (typeof TLTRN.logDialogShowEvent === 'function') {
console.log('✅ TLTRN.logDialogShowEvent - EXISTS');
} else {
console.error('❌ TLTRN.logDialogShowEvent - NOT FOUND');
}
if (typeof TLTRN.interceptDialogEvents === 'function') {
console.log('✅ TLTRN.interceptDialogEvents - EXISTS');
} else {
console.error('❌ TLTRN.interceptDialogEvents - NOT FOUND');
}
// Test method call
TLTRN.logDialogShowEvent('test-dialog-id', 'Test Dialog', 'test');
console.log('✅ TLTRN.logDialogShowEvent() - CALLED');
} catch (error) {
console.error('❌ DialogDebugger: TLTRN test failed:', error);
}
}
/**
* Test Alert.alert override
*/
private testAlertOverride(): void {
console.log('🔍 DialogDebugger: Testing Alert.alert override...');
try {
// Check if Alert.alert is overridden
if (Alert.alert !== this.originalAlert) {
console.log('✅ Alert.alert is overridden');
} else {
console.error('❌ Alert.alert is NOT overridden');
}
// Test Alert.alert call
Alert.alert('Debug Test', 'This is a test alert', [
{ text: 'OK', onPress: () => console.log('🔍 DialogDebugger: Alert OK pressed') }
]);
console.log('✅ Alert.alert() - CALLED');
} catch (error) {
console.error('❌ DialogDebugger: Alert.alert test failed:', error);
}
}
/**
* Test native method calls
*/
private testNativeMethods(): void {
console.log('🔍 DialogDebugger: Testing native method calls...');
try {
// Import AcousticConnectRN to test native calls
const AcousticConnectRN = require('../index').default;
if (AcousticConnectRN && typeof AcousticConnectRN.logDialogShowEvent === 'function') {
console.log('✅ AcousticConnectRN.logDialogShowEvent - EXISTS');
// Test native call
const result = AcousticConnectRN.logDialogShowEvent('test-dialog-id', 'Test Dialog', 'test');
console.log('✅ AcousticConnectRN.logDialogShowEvent() - CALLED, result:', result);
} else {
console.error('❌ AcousticConnectRN.logDialogShowEvent - NOT FOUND');
}
} catch (error) {
console.error('❌ DialogDebugger: Native method test failed:', error);
}
}
/**
* Check if dialog tracking is properly enabled
*/
checkDialogTrackingStatus(): void {
console.log('🔍 DialogDebugger: Checking dialog tracking status...');
// Check DialogListener status
const dialogListener = DialogListener.getInstance();
console.log('DialogListener status:', {
isIntercepting: (dialogListener as any).isIntercepting,
eventCallbacksCount: (dialogListener as any).eventCallbacks?.length || 0
});
// Check if Alert.alert is overridden
console.log('Alert.alert override status:', {
isOverridden: Alert.alert !== this.originalAlert,
originalAlert: this.originalAlert,
currentAlert: Alert.alert
});
// Check TLTRN methods
console.log('TLTRN methods status:', {
logDialogShowEvent: typeof TLTRN.logDialogShowEvent,
interceptDialogEvents: typeof TLTRN.interceptDialogEvents
});
}
/**
* Force enable dialog tracking for testing
*/
forceEnableDialogTracking(): void {
console.log('🔍 DialogDebugger: Force enabling dialog tracking...');
try {
// Force enable DialogListener
const dialogListener = DialogListener.getInstance();
(dialogListener as any).isIntercepting = true;
console.log('✅ DialogListener interception forced enabled');
// Force enable TLTRN dialog events
TLTRN.interceptDialogEvents(true);
console.log('✅ TLTRN dialog events forced enabled');
} catch (error) {
console.error('❌ DialogDebugger: Force enable failed:', error);
}
}
}
export default DialogDebugger;