android-ab-test-builder

Additional

Language
Java
Version
N/A
Created
Aug 18, 2015
Updated
Jun 5, 2016 (Retired)
Owner
Takahiro Menju (takahirom)
Contributor
Takahiro Menju (takahirom)
1
Activity
Badge
Generate
Download
Source code

android-ab-test-builder

Simple tool which help you to implement A/B Test.

Download

Comming soon.

Code

Preparation

Prepare enum.

enum ButtonColorPatterns {
    RED, GREEN, YELLOW
}

Build ABTest instance

// Show button RED : GREEN : YELLOW = 80 : 10 : 10
final ABTest<ButtonColorPatterns> buttonColorABTest = new ABTest.Builder<ButtonColorPatterns>(this)
        .with("ButtonColorPatterns", ButtonColorPatterns.class)
        .addPattern(new ABPattern<>(ButtonColorPatterns.RED, 80))
        .addPattern(new ABPattern<>(ButtonColorPatterns.GREEN, 10))
        .addPattern(new ABPattern<>(ButtonColorPatterns.YELLOW, 10))
        .buildIfFirstTime();

Send visit log

buttonColorABTest.visit(new VisitDispatcher<ButtonColorPatterns>() {
    @Override
    public void dispatch(ABPattern<ButtonColorPatterns> pattern) {
        // visit
        switch (pattern.patternEnumValue) {
            case RED:
                button.setBackgroundColor(Color.RED);
                // sendLog("visit red")
                break;
            case GREEN:
                button.setBackgroundColor(Color.GREEN);
                // sendLog("visit green")
                break;
            case YELLOW:
                button.setBackgroundColor(Color.YELLOW);
                // sendLog("visit yellow")
                break;
        }
        Toast.makeText(MainActivity.this, "show:" + pattern.getName(), Toast.LENGTH_SHORT).show();

    }
});

Send click log

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // If ABTest already built,ABTest instance can created by patternEnumValue.
        ABTest<ButtonColorPatterns> builtInstance = ABTest.getBuiltInstance(MainActivity.this, "ButtonColorPatterns", ButtonColorPatterns.class);
        if (builtInstance == null) {
            // If not already built returns null;
            return;
        }
        builtInstance.convert(new ConvertDispatcher<ButtonColorPatterns>() {
            @Override
            public void dispatch(ABPattern<ButtonColorPatterns> pattern) {
                // send conversion log
                switch (pattern.patternEnumValue) {
                    case RED:
                        // sendLog("conversion red")
                        break;
                    case GREEN:
                        // sendLog("conversion green")
                        break;
                    case YELLOW:
                        // sendLog("conversion yellow")
                        break;
                }
                Toast.makeText(MainActivity.this, "click:" + pattern.getName(), Toast.LENGTH_SHORT).show();
            }
        });
    }
});

More efficient way by enum field

Prepare enum with color and name for logging.

enum ButtonColorPatterns {
    RED("red", Color.RED), GREEN("green", Color.GREEN), YELLOW("yellow", Color.YELLOW);

    // name for logging
    private final String patternName;
    // button color
    private final int color;

    ButtonColorPatterns(String patternName, @ColorInt int color) {
        this.patternName = patternName;
        this.color = color;
    }
}

Build ABTest instance

final ABTest<ButtonColorPatterns> buttonColorABTest = new ABTest.Builder<ButtonColorPatterns>(this)
        .with("ButtonColorPatterns", ButtonColorPatterns.class)
        .addPattern(new ABPattern<>(ButtonColorPatterns.RED, 60))
        .addPattern(new ABPattern<>(ButtonColorPatterns.GREEN, 20))
        .addPattern(new ABPattern<>(ButtonColorPatterns.YELLOW, 20))
        .buildIfFirstTime();

Send visit log

You can remove switch case statement by enum.

buttonColorABTest.visit(new VisitDispatcher<ButtonColorPatterns>() {
    @Override
    public void dispatch(ABPattern<ButtonColorPatterns> pattern) {
        // visit
        button.setBackgroundColor(pattern.patternEnumValue.color);
        // You can send visit log with pattern.patternEnumValue.patternName
        // sendVisitLog(pattern.patternEnumValue.patternName);

        Toast.makeText(EnumFieldMainActivity.this, "show:" + pattern.getName(), Toast.LENGTH_SHORT).show();

    }
});

Send click log

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // If ABTest already built,ABTest instance can created by patternEnumValue.
        ABTest<ButtonColorPatterns> builtInstance = ABTest.getBuiltInstance(EnumFieldMainActivity.this, "ButtonColorPatterns", ButtonColorPatterns.class);
        if (builtInstance == null) {
            // If not already built returns null;
            return;
        }
        builtInstance.convert(new ConvertDispatcher<ButtonColorPatterns>() {
            @Override
            public void dispatch(ABPattern<ButtonColorPatterns> pattern) {
                // You can send conversion log with pattern.patternEnumValue.patternName
                // sendConversionLog(pattern.patternEnumValue.patternName);

                Toast.makeText(EnumFieldMainActivity.this, "click:" + pattern.getName(), Toast.LENGTH_SHORT).show();
            }
        });
    }
});

License

This project is released under the Apache License, Version 2.0.