The Playground.java class is a dedicated component designed to facilitate plugin configuration, development, and testing. It acts as a sandbox where you can set plugin-specific options and experiment with features without modifying the core plugin source code.

All Premium Plugins are now available for free and open source to developers. Consider becoming Project Sponsor.


Purpose

  • Plugin Configuration: The primary place to set runtime options for plugins (e.g., providing AdMob ad unit IDs, enabling biometric authentication on launch).
  • Centralized Testing: Provides a single place to run diagnostic checks and add UI elements to the web page for manually testing plugin functionality.
  • Initialization Hook: Ensures that plugin configurations and tests only run after the core plugin system is fully initialized and ready.
  • Fail-Safe Diagnostics: Contains a robust system (runPluginDiagnostic) to test plugins without crashing the app if a plugin is missing or fails.
  • Example Implementation: Serves as a clear example of how to get a plugin instance from the PluginManager and interact with it.

How It Works

The Playground is initialized in MainActivity. The PluginManager calls its onPageFinished method after a page loads, which triggers two main actions if the playground is enabled in swv.properties:

  1. configurePlugins(): This method applies configurations to any enabled plugins. For example, it sets the ad unit IDs for the AdMobPlugin.
  2. runAllDiagnostics() and setupPluginDemoUI(): These methods inject a floating panel with buttons into the web page, allowing you to manually trigger and test each plugin’s features.

Configuring a Plugin

To configure a plugin, modify the configurePlugins method in Playground.java.

// Inside configurePlugins() in Playground.java

// BiometricPlugin Configuration
runPluginAction("BiometricPlugin", plugin -> {
    Map<String, Object> config = SWVContext.getPluginManager().getPluginConfig("BiometricPlugin");
    if (config != null) {
        // Set to true to require auth every time the app starts
        config.put("authOnAppLaunch", true); 
    }
});

// AdMobPlugin Configuration
runPluginAction("AdMobPlugin", plugin -> {
    Map<String, Object> config = SWVContext.getPluginManager().getPluginConfig("AdMobPlugin");
    if (config != null) {
        // Replace with your real AdMob unit IDs for production
        config.put("bannerAdUnitId", "ca-app-pub-3940256099942544/6300978111");
        config.put("interstitialAdUnitId", "ca-app-pub-3940256099942544/1033173712");
    }
});

By using the Playground, you can effectively develop, configure, and debug your plugins in an isolated and controlled manner.