Custom executable actions

Objective-C

ACTION_METHOD macro implements custom executable actions. Any configuration properties you modify in the action method are persisted. Actions appear below properties in the Appfigurate UI.

ACTION_METHOD implementation

ACTION_METHOD(actionName, description, restart) { ... }

Allows the custom executable action to be executed by Appfigurate. If restart is YES then the app will be restarted after the action method is executed.

Objective-C example

@implementation Configuration

ACTION_METHOD(freshInstall, "Resets application to fresh install state", NO) {
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
    NSDictionary* dict = [defs dictionaryRepresentation];
    for (id key in dict) {
        [defs removeObjectForKey: key];
    }
    [defs synchronize];
}
...

Appfigurate UI element example

Swift

As you cannot annotate a Swift method with a property wrapper, your action methods must be specified manually. Any configuration properties you modify in the action method are persisted. Actions appear below properties in the Appfigurate UI.

Manual implementation

Replace XXX with the name of your action (e.g. freshInstall)

func XXXDescription() -> String
func XXXAction()
func XXXRestart() -> Bool

Allows the custom executable action to be executed by Appfigurate. If you return true from your XXXRestart() method, then the app will be restarted after the action method is executed.

Swift example

@objcMembers class Configuration: APLConfiguration {

    func freshInstallDescription() -> String {
        return "Resets application to fresh install state"
    }
    
    func freshInstallAction() {
        let defs = UserDefaults.standard
        let dict = defs.dictionaryRepresentation()
        for key in dict.keys {
            defs.removeObject(forKey: key)
        }
        defs.synchronize()
    }

    func freshInstallRestart() -> Bool {
        return false
    }
    ...

Appfigurate UI element example

Java

@ActionMethod annotation implements custom executable actions. Any configuration properties you modify in the action method are persisted. Actions appear below properties in the Appfigurate UI.

@ActionMethod implementation

@ActionMethod(description, restart)

Allows the custom executable action to be executed by Appfigurate. If restart is true then the app will be restarted after the action method is executed.

Java example

@ActionMethod(description = "Resets application to fresh install state", restart = false)
public void freshInstall() {
    SharedPreferences preferences = context.getSharedPreferences("storage", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.clear();
    editor.apply();
}

Appfigurate UI element example

Kotlin

@ActionMethod annotation implements custom executable actions. Any configuration properties you modify in the action method are persisted. Actions appear below properties in the Appfigurate UI.

@ActionMethod implementation

@ActionMethod(description, restart)

Allows the custom executable action to be executed by Appfigurate. If restart is true then the app will be restarted after the action method is executed.

Kotlin example

@ActionMethod(description = "Resets application to fresh install state", restart = false)
fun freshInstall() {
    var preferences = context.getSharedPreferences("storage", Context.MODE_PRIVATE)
    var editor = preferences.edit()
    editor.clear()
    editor.apply()
}

Appfigurate UI element example

Dart

When an action is executed in the underlying native APLConfiguration (iOS) or nz.co.electricbolt.appfiguratelibrary.Configuration (Android) subclass, Flutter is also notified. Override the actionExecuted(action) method in APLNativeConfiguration as follows to receive the action:

Dart example

import 'package:appfigurateflutter/appfigurateflutter.dart';

class ExampleConfiguration extends APLNativeConfiguration {
  factory ExampleConfiguration() => _instance;

  static final ExampleConfiguration _instance = ExampleConfiguration._internal();

  ExampleConfiguration._internal();

  @override
  void actionExecuted(String action) {
    if (action == 'freshInstall') {
      ...
    }
  }
...

Last updated