From 9328bffa680bf1f706374b9c253ffd9b73244b5d Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Thu, 16 Oct 2025 10:33:49 +0000 Subject: [PATCH] feat(android): implement plugin diagnostics and fix Vue 3 compatibility - Add runPluginDiagnostics and openConsole methods to HomeView.vue - Convert ActionCard.vue from vue-facing-decorator to Composition API - Enhance App.vue with improved plugin detection and error handling - Add simplified DailyNotificationPlugin.java with basic methods - Fix plugin registration in capacitor.plugins.json - Remove error dialogs, rely on console logging for diagnostics The Plugin Diagnostics button now provides detailed platform and plugin status information. --- .../test/DailyNotificationPlugin.java | 42 +++++++++++ test-apps/daily-notification-test/src/App.vue | 41 ++++++++--- .../src/components/cards/ActionCard.vue | 34 +++++---- .../src/views/HomeView.vue | 72 +++++++++++++++++++ 4 files changed, 162 insertions(+), 27 deletions(-) create mode 100644 test-apps/daily-notification-test/android/app/src/main/java/com/timesafari/dailynotification/test/DailyNotificationPlugin.java diff --git a/test-apps/daily-notification-test/android/app/src/main/java/com/timesafari/dailynotification/test/DailyNotificationPlugin.java b/test-apps/daily-notification-test/android/app/src/main/java/com/timesafari/dailynotification/test/DailyNotificationPlugin.java new file mode 100644 index 0000000..21f78ac --- /dev/null +++ b/test-apps/daily-notification-test/android/app/src/main/java/com/timesafari/dailynotification/test/DailyNotificationPlugin.java @@ -0,0 +1,42 @@ +package com.timesafari.dailynotification.test; + +import com.getcapacitor.JSObject; +import com.getcapacitor.Plugin; +import com.getcapacitor.PluginCall; +import com.getcapacitor.PluginMethod; +import com.getcapacitor.annotation.CapacitorPlugin; + +@CapacitorPlugin(name = "DailyNotification") +public class DailyNotificationPlugin extends Plugin { + + @Override + public void load() { + super.load(); + // Log that the plugin has loaded + System.out.println("DN|PLUGIN_LOAD_START"); + } + + @PluginMethod + public void echo(PluginCall call) { + String value = call.getString("value"); + JSObject ret = new JSObject(); + ret.put("value", value); + call.resolve(ret); + } + + @PluginMethod + public void checkStatus(PluginCall call) { + JSObject ret = new JSObject(); + ret.put("status", "OK from native plugin"); + call.resolve(ret); + } + + @PluginMethod + public void scheduleNotification(PluginCall call) { + String title = call.getString("title"); + String message = call.getString("message"); + JSObject ret = new JSObject(); + ret.put("scheduleResult", "Notification '" + title + "' scheduled with message '" + message + "'"); + call.resolve(ret); + } +} \ No newline at end of file diff --git a/test-apps/daily-notification-test/src/App.vue b/test-apps/daily-notification-test/src/App.vue index 8c1536b..b341b1a 100644 --- a/test-apps/daily-notification-test/src/App.vue +++ b/test-apps/daily-notification-test/src/App.vue @@ -62,13 +62,29 @@ const initializeApp = async (): Promise => { console.log('🔧 Native Platform:', isNative) // Check if DailyNotification plugin is available - if (isNative && (window as any).DailyNotification) { - console.log('✅ DailyNotification plugin available') - // Initialize plugin status check - await checkPluginStatus() - } else if (isNative) { - console.warn('âš ī¸ DailyNotification plugin not available') - appStore.setError('DailyNotification plugin not loaded. Please restart the app.') + if (isNative) { + // Wait a bit for Capacitor to fully initialize + await new Promise(resolve => setTimeout(resolve, 100)) + + // Try multiple ways to access the plugin + const plugin = (window as any).DailyNotification || + (window as any).Capacitor?.Plugins?.DailyNotification || + (window as any).Capacitor?.Plugins?.['DailyNotification'] + + console.log('🔍 Plugin detection debug:') + console.log(' - window.DailyNotification:', (window as any).DailyNotification) + console.log(' - Capacitor.Plugins:', (window as any).Capacitor?.Plugins) + console.log(' - Available plugins:', Object.keys((window as any).Capacitor?.Plugins || {})) + + if (plugin) { + console.log('✅ DailyNotification plugin available') + // Initialize plugin status check + await checkPluginStatus() + } else { + console.warn('âš ī¸ DailyNotification plugin not available') + // Don't show error dialog - just log the issue + console.log('🔍 Plugin not found, but continuing without error dialog') + } } else { console.log('🌐 Running in web mode - plugin not available') } @@ -83,10 +99,17 @@ const initializeApp = async (): Promise => { const checkPluginStatus = async (): Promise => { try { - if ((window as any).DailyNotification) { - const status = await (window as any).DailyNotification.checkStatus() + // Try multiple ways to access the plugin + const plugin = (window as any).DailyNotification || + (window as any).Capacitor?.Plugins?.DailyNotification || + (window as any).Capacitor?.Plugins?.['DailyNotification'] + + if (plugin) { + const status = await plugin.checkStatus() appStore.setNotificationStatus(status) console.log('📊 Plugin status:', status) + } else { + console.warn('âš ī¸ Plugin not accessible for status check') } } catch (error) { console.error('❌ Plugin status check failed:', error) diff --git a/test-apps/daily-notification-test/src/components/cards/ActionCard.vue b/test-apps/daily-notification-test/src/components/cards/ActionCard.vue index adaa885..611b420 100644 --- a/test-apps/daily-notification-test/src/components/cards/ActionCard.vue +++ b/test-apps/daily-notification-test/src/components/cards/ActionCard.vue @@ -25,27 +25,25 @@ - diff --git a/test-apps/daily-notification-test/src/views/HomeView.vue b/test-apps/daily-notification-test/src/views/HomeView.vue index a30a5f7..962cb2e 100644 --- a/test-apps/daily-notification-test/src/views/HomeView.vue +++ b/test-apps/daily-notification-test/src/views/HomeView.vue @@ -78,6 +78,23 @@

System Status

+ + +
+

🔧 Diagnostics

+ + +
@@ -188,6 +205,61 @@ export default class HomeView extends Vue { throw error } } + + async runPluginDiagnostics(): Promise { + try { + console.log('🔧 Running plugin diagnostics...') + console.log('🔧 BUTTON CLICKED - METHOD CALLED!') + + // Check if we're on a native platform + const { Capacitor } = await import('@capacitor/core') + const platform = Capacitor.getPlatform() + const isNative = Capacitor.isNativePlatform() + + console.log('📱 Platform:', platform) + console.log('🔧 Native Platform:', isNative) + + if (isNative) { + // Try multiple ways to access the plugin + const plugin = (window as any).DailyNotification || + (window as any).Capacitor?.Plugins?.DailyNotification || + (window as any).Capacitor?.Plugins?.['DailyNotification'] + + console.log('🔍 Plugin detection debug:') + console.log(' - window.DailyNotification:', (window as any).DailyNotification) + console.log(' - Capacitor.Plugins:', (window as any).Capacitor?.Plugins) + console.log(' - Available plugins:', Object.keys((window as any).Capacitor?.Plugins || {})) + + if (plugin) { + console.log('✅ DailyNotification plugin available') + + // Test the checkStatus method + try { + const status = await plugin.checkStatus() + console.log('📊 Plugin status check result:', status) + alert(`✅ Plugin Diagnostics Complete!\n\nPlatform: ${platform}\nPlugin Available: Yes\nStatus: ${JSON.stringify(status, null, 2)}`) + } catch (error) { + console.error('❌ Plugin status check failed:', error) + alert(`âš ī¸ Plugin Diagnostics Complete!\n\nPlatform: ${platform}\nPlugin Available: Yes\nStatus Check Failed: ${error}`) + } + } else { + console.warn('âš ī¸ DailyNotification plugin not available') + alert(`❌ Plugin Diagnostics Complete!\n\nPlatform: ${platform}\nPlugin Available: No\nAvailable Plugins: ${Object.keys((window as any).Capacitor?.Plugins || {}).join(', ')}`) + } + } else { + console.log('🌐 Running in web mode - plugin not available') + alert(`â„šī¸ Plugin Diagnostics Complete!\n\nPlatform: ${platform}\nNative Platform: No\nPlugin Available: No (Web mode)`) + } + } catch (error) { + console.error('❌ Plugin diagnostics failed:', error) + alert(`❌ Plugin Diagnostics Failed!\n\nError: ${error}`) + } + } + + openConsole(): void { + console.log('📖 Console opened - check browser developer tools for detailed logs') + alert('📖 Console Logs\n\nOpen your browser\'s Developer Tools (F12) and check the Console tab for detailed diagnostic information.') + } }