MCPcopy Index your code
hub / github.com/PaNaVTEC/Wizard

github.com/PaNaVTEC/Wizard @1.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.2 ↗ · + Follow
58 symbols 121 edges 14 files 1 documented · 2% 3 cross-repo links updated 10y ago★ 611 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Android Wizard

Android Arsenal Maven Central

Logo

Sample app

Logo

Importing to your project

Add this dependency to your build.gradle file:

dependencies {
    compile 'me.panavtec:wizard:1.2'
}

Basic usage

Create a WizardPage for each fragment you need to present, the only mandatory method to override is "createFragment()":

public class WizardPage1 extends WizardPage<Fragment1> {
    @Override public Fragment1 createFragment() {
        return new Fragment1();
    }
}

Create a wizard in your activity in this way:

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        wizard = new Wizard.Builder(this, new WizardPage1())
        .build();
    ...
...

And call init:

wizard.init();

Now the wizard is initalized, to use navigation just call, "navigatePrevious", "navigateNext" or "returnToFirst". You can get the current fragment by calling "getCurrentFragment"

Advanced usage

Animation transitions

You can declare animations for entering/exiting fragments when creating Wizard in this way:

new Wizard.Builder(this, new WizardPage1(), new WizardPage2(), new WizardPage3())
        .containerId(android.R.id.content)
        .enterAnimation(R.anim.card_slide_right_in)
        .exitAnimation(R.anim.card_slide_left_out)
        .popEnterAnimation(R.anim.card_slide_left_in)
        .popExitAnimation(R.anim.card_slide_right_out)
        .build();

This xml animations are uploaded to the sample project.

Provide a custom container for fragment navigation

if you don't set the containerId attribute, Wizard uses android.R.id.content by default but you can personalize a custom container by calling:

new Wizard.Builder(this, new WizardPage1())
        .containerId(R.id.my_container)

Customize ActionBar in navigation

In the wizard page you can override method "setupActionBar" to customize your actionbar on each navigated fragment, ex:

@Override public void setupActionBar(ActionBar supportActionBar) {
    super.setupActionBar(supportActionBar);
    supportActionBar.hide();
}

In this example when the fragment is navigated, the actionbar will be hidden.

Option menu in Actionbar

If you have a Fragment that uses actionbar option menus, you can override "hasOptionMenu" and return true to invalidate the option menus when navigating.

Blocking Fragment

Do you need to block the back navigation of your wizard in determinate steps? It's so easy, just override "allowsBackNavigation" in your WizardPage and add this in your activity:

@Override public void onBackPressed() {
    if (wizard.onBackPressed()) {
        super.onBackPressed();
    }
}

Listeners

You can declare listeners for page changed and for wizard finished events:

WizardPage[] wizardPages = { new WizardPage1(), new WizardPage2(), new WizardPage3() };
new Wizard.Builder(this, wizardPages)
        .containerId(android.R.id.content)
        .pageListener(new WizardPageListener() {
            @Override
            public void onPageChanged(int currentPageIndex, WizardPage page) {
                //Your code for page changed
            }
        })
        .wizardListener(new WizardListener() {
            @Override
            public void onWizardFinished() {
                //Your code for wizard finished
            }
        })
        .build();

Dagger Tips

If you are using Dagger in your project I suggest to use Wizard in this way. ActivityModule:

@Provides @Singleton Wizard provideWizard(ActionBarActivity activity,
                                              SampleWizardPage page) {
    return new Wizard.Builder(activity, page)
            .containerId(android.R.id.content)
            .build();
}

@Provides @Singleton SampleWizardPage provideSampleWizardPage(ActionBarActivity activity) {
    return new SampleWizardPage(activity);
}

Activity:

@Inject Wizard wizard;

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    wizard.init();
}

Fragment:

@Inject Wizard wizard;

@Override protected void someOnClickAction() {
    wizard.navigateNext();
}

Developed by

Christian Panadero Martinez - http://panavtec.me - @PaNaVTEC

License

Copyright 2015 Christian Panadero Martinez

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Extension points exported contracts — how you extend this code

WizardPageListener (Interface)
(no doc) [2 implementers]
wizard/src/main/java/me/panavtec/wizard/WizardPageListener.java
ActionBarResolver (Interface)
(no doc) [2 implementers]
wizard/src/main/java/me/panavtec/wizard/ActionBarResolver.java
WizardListener (Interface)
(no doc) [2 implementers]
wizard/src/main/java/me/panavtec/wizard/WizardListener.java

Core symbols most depended-on inside this repo

getWizard
called by 4
app/src/main/java/me/panavtec/wizardsample/MainActivity.java
createFragment
called by 2
wizard/src/main/java/me/panavtec/wizard/WizardPage.java
setupActionBar
called by 2
wizard/src/main/java/me/panavtec/wizard/WizardPage.java
hasOptionMenu
called by 2
wizard/src/main/java/me/panavtec/wizard/WizardPage.java
navigatePrevious
called by 2
wizard/src/main/java/me/panavtec/wizard/Wizard.java
navigateNext
called by 2
wizard/src/main/java/me/panavtec/wizard/Wizard.java
getSupportActionBar
called by 2
wizard/src/main/java/me/panavtec/wizard/ActionBarResolver.java
allowsBackNavigation
called by 1
wizard/src/main/java/me/panavtec/wizard/WizardPage.java

Shape

Method 43
Class 12
Interface 3

Languages

Java100%

Modules by API surface

wizard/src/main/java/me/panavtec/wizard/Wizard.java13 symbols
wizard/src/main/java/me/panavtec/wizard/WizardBuilder.java10 symbols
wizard/src/main/java/me/panavtec/wizard/WizardPage.java5 symbols
app/src/main/java/me/panavtec/wizardsample/MainActivity.java5 symbols
wizard/src/main/java/me/panavtec/wizard/ReflectionActionBarResolver.java4 symbols
app/src/main/java/me/panavtec/wizardsample/Fragment3.java3 symbols
app/src/main/java/me/panavtec/wizardsample/Fragment2.java3 symbols
app/src/main/java/me/panavtec/wizardsample/Fragment1.java3 symbols
wizard/src/main/java/me/panavtec/wizard/WizardPageListener.java2 symbols
wizard/src/main/java/me/panavtec/wizard/WizardListener.java2 symbols
wizard/src/main/java/me/panavtec/wizard/ActionBarResolver.java2 symbols
app/src/main/java/me/panavtec/wizardsample/WizardPage3.java2 symbols

For agents

$ claude mcp add Wizard \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact