From 200f85a1fb7e75594a6ddf43e59bde52506ee155 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Fri, 17 Oct 2025 10:13:50 +0000 Subject: [PATCH] fix(test-app): resolve plugin detection and remove unused HomeViewSimple - Fix System Status card to show correct plugin availability - Add automatic status check on component mount - Remove HomeViewSimple.vue (no longer needed) - Fix Vue 3 compatibility issues (@click.native removal) - Add comprehensive plugin diagnostics with all available plugins - Implement post-sync script to maintain capacitor.plugins.json - Add annotation processor for automatic plugin discovery The DailyNotification plugin now loads correctly and both System Status and Plugin Diagnostics show consistent, accurate information. --- .../android/app/build.gradle | 4 + .../dailynotification/test/MainActivity.java | 14 - .../android/dailynotification/build.gradle | 3 + .../scripts/fix-capacitor-plugins.js | 58 ++++ .../src/components/cards/ActionCard.vue | 8 +- .../src/router/index.ts | 4 +- .../src/views/HomeView.vue | 90 +++++- .../src/views/HomeViewSimple.vue | 258 ------------------ 8 files changed, 154 insertions(+), 285 deletions(-) create mode 100755 test-apps/daily-notification-test/scripts/fix-capacitor-plugins.js delete mode 100644 test-apps/daily-notification-test/src/views/HomeViewSimple.vue diff --git a/test-apps/daily-notification-test/android/app/build.gradle b/test-apps/daily-notification-test/android/app/build.gradle index dfe0fe4..591f302 100644 --- a/test-apps/daily-notification-test/android/app/build.gradle +++ b/test-apps/daily-notification-test/android/app/build.gradle @@ -40,6 +40,10 @@ dependencies { implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion" implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" implementation project(':capacitor-android') + + // Capacitor annotation processor for automatic plugin discovery + annotationProcessor project(':capacitor-android') + testImplementation "junit:junit:$junitVersion" androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" diff --git a/test-apps/daily-notification-test/android/app/src/main/java/com/timesafari/dailynotification/test/MainActivity.java b/test-apps/daily-notification-test/android/app/src/main/java/com/timesafari/dailynotification/test/MainActivity.java index 8f2403c..21410df 100644 --- a/test-apps/daily-notification-test/android/app/src/main/java/com/timesafari/dailynotification/test/MainActivity.java +++ b/test-apps/daily-notification-test/android/app/src/main/java/com/timesafari/dailynotification/test/MainActivity.java @@ -1,24 +1,10 @@ package com.timesafari.dailynotification.test; import com.getcapacitor.BridgeActivity; -import com.timesafari.dailynotification.DailyNotificationPlugin; public class MainActivity extends BridgeActivity { @Override public void onCreate(android.os.Bundle savedInstanceState) { - android.util.Log.d("MainActivity", "MainActivity.onCreate() called - START"); - - // Register the DailyNotification plugin BEFORE calling super.onCreate() - android.util.Log.d("MainActivity", "Registering DailyNotification plugin..."); - try { - registerPlugin(DailyNotificationPlugin.class); - android.util.Log.d("MainActivity", "DailyNotification plugin registered successfully"); - } catch (Exception e) { - android.util.Log.e("MainActivity", "Failed to register DailyNotification plugin", e); - } - super.onCreate(savedInstanceState); - android.util.Log.d("MainActivity", "MainActivity.onCreate() - after super.onCreate()"); - android.util.Log.d("MainActivity", "MainActivity.onCreate() called - END"); } } diff --git a/test-apps/daily-notification-test/android/dailynotification/build.gradle b/test-apps/daily-notification-test/android/dailynotification/build.gradle index 78a473b..95e5a48 100644 --- a/test-apps/daily-notification-test/android/dailynotification/build.gradle +++ b/test-apps/daily-notification-test/android/dailynotification/build.gradle @@ -19,4 +19,7 @@ android { dependencies { implementation project(':capacitor-android') + + // Capacitor annotation processor for automatic plugin discovery + annotationProcessor project(':capacitor-android') } diff --git a/test-apps/daily-notification-test/scripts/fix-capacitor-plugins.js b/test-apps/daily-notification-test/scripts/fix-capacitor-plugins.js new file mode 100755 index 0000000..1badebd --- /dev/null +++ b/test-apps/daily-notification-test/scripts/fix-capacitor-plugins.js @@ -0,0 +1,58 @@ +#!/usr/bin/env node + +/** + * Post-sync script to fix capacitor.plugins.json + * This ensures the DailyNotification plugin is always registered + * even after npx cap sync overwrites the file + * + * @author Matthew Raymer + */ + +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const PLUGINS_JSON_PATH = path.join(__dirname, '../android/app/src/main/assets/capacitor.plugins.json'); + +const PLUGIN_ENTRY = { + name: "DailyNotification", + classpath: "com.timesafari.dailynotification.DailyNotificationPlugin" +}; + +function fixCapacitorPlugins() { + console.log('🔧 Fixing capacitor.plugins.json...'); + + try { + // Read current content + let plugins = []; + if (fs.existsSync(PLUGINS_JSON_PATH)) { + const content = fs.readFileSync(PLUGINS_JSON_PATH, 'utf8'); + plugins = JSON.parse(content); + } + + // Check if our plugin is already there + const hasPlugin = plugins.some(p => p.name === PLUGIN_ENTRY.name); + + if (!hasPlugin) { + plugins.push(PLUGIN_ENTRY); + fs.writeFileSync(PLUGINS_JSON_PATH, JSON.stringify(plugins, null, 2)); + console.log('✅ Added DailyNotification plugin to capacitor.plugins.json'); + } else { + console.log('✅ DailyNotification plugin already exists in capacitor.plugins.json'); + } + + } catch (error) { + console.error('❌ Error fixing capacitor.plugins.json:', error.message); + process.exit(1); + } +} + +// Run if called directly +if (import.meta.url === `file://${process.argv[1]}`) { + fixCapacitorPlugins(); +} + +export { fixCapacitorPlugins }; 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 0e51892..7236db5 100644 --- a/test-apps/daily-notification-test/src/components/cards/ActionCard.vue +++ b/test-apps/daily-notification-test/src/components/cards/ActionCard.vue @@ -36,7 +36,13 @@ class ActionCard extends Vue { @Prop({ type: Boolean, default: false }) loading!: boolean handleClick() { - if (!this.loading) this.$emit('click') + console.log('🔄 ActionCard handleClick called for:', this.title) + if (!this.loading) { + console.log('🔄 ActionCard emitting click event for:', this.title) + this.$emit('click') + } else { + console.log('🔄 ActionCard click ignored - loading state') + } } } diff --git a/test-apps/daily-notification-test/src/router/index.ts b/test-apps/daily-notification-test/src/router/index.ts index 4ebcade..08ff043 100644 --- a/test-apps/daily-notification-test/src/router/index.ts +++ b/test-apps/daily-notification-test/src/router/index.ts @@ -1,5 +1,5 @@ import { createRouter, createWebHistory } from 'vue-router' -import HomeViewSimple from '../views/HomeViewSimple.vue' +import HomeView from '../views/HomeView.vue' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -7,7 +7,7 @@ const router = createRouter({ { path: '/', name: 'Home', - component: HomeViewSimple, + component: HomeView, meta: { title: 'Daily Notification Test', requiresAuth: false diff --git a/test-apps/daily-notification-test/src/views/HomeView.vue b/test-apps/daily-notification-test/src/views/HomeView.vue index 3fcd196..ed73a64 100644 --- a/test-apps/daily-notification-test/src/views/HomeView.vue +++ b/test-apps/daily-notification-test/src/views/HomeView.vue @@ -100,7 +100,7 @@