Skip to content

nekocode/Meepo

Repository files navigation

Meepo

Build Status codecov

Meepo is a router generator for android, similar to retrofit. You can use it to create routers for Activities, Fragments and even any things.

Integration

Replace the ${last-version} in below code to number Release .

repositories {
    maven { url "https://jitpack.io" }
}
dependencies {
    implementation "com.github.nekocode:Meepo:${last-version}"
}

Usage

Firstly, declare a router interface:

public interface Router {
    @Path("user/{user_id}/detail")
    @RequestCode(1)
    boolean gotoUserDetail(Context context, @PathParam("user_id") String userId, 
                           @QueryParam("show_title") boolean showTitle);

    @Clazz(StoreActivity.class)
    @Flags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
    void gotoB(Context context, @BundleParam("title") String title,
               @RequestCodeParam int requestCode);
}

If you want to open your Activity via URI, you need to add a uri intent filter to the corresponding <activity> element in the manifest file:

<activity android:name=".UserDetailActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>

        <data
            android:host="meepo.com"
            android:pathPattern="/user/.*/detail"
            android:scheme="meepo"/>
    </intent-filter>
</activity>

And then obtain an implementation of your router interface:

final Meepo meepo = new Meepo.Builder()
        .config(new UriConfig().scheme("meepo").host("meepo.com"))
        .build();

final Router router = meepo.create(Router.class);

Now, you can invoke the router's navigation methods:

boolean isSucess = router.gotoUserDetail(this, "123", true);

Router Annotation

This library currently provides the following annotations:

Method Annotation Description
@Clazz Class of target Activity
@ClazzName Class name of target Activity
@Path URI path and mime type of target Activity
@Action Action of Intent
@Flags Flags of Intent
@RequestCode Request code of Intent
Parameter Annotation Description
@BundleParam Parameter that will be put into the extra of Intent
@PathParam Parameter that will be used to replace the URI path's corresponding replacement block
@QueryParam Query parameter of the URI
@QueryMapParam Map of Query parameters
@RequestCodeParam Request code of Intent

Custom Parser and CallAdapter

You can create custom Parser and CallAdapter. You can reference the sample module. It means that you can create router for anything.

final ModuleRouter moduleRouter = new Meepo.Builder()
        .config(new ModuleConfig("TEST"))
        .parser(new ModuleParser())
        .adapter(new ModuleCallAdapter())
        .build()
        .create(ModuleRouter.class);