From 10185407f3db44f296f0bfffd38ad8e79d5051aa Mon Sep 17 00:00:00 2001 From: drakeet Date: Thu, 21 Sep 2017 12:30:47 +0800 Subject: [PATCH] Added IntentHandler to start or handle Intents (#13) * Added IntentHandler to start or handle Intents Closed #11 * Added setIntentHandler guide for README * Fixed a code style issue --- README.md | 1 + README_CN.md | 1 + .../java/me/drakeet/floo/Configuration.java | 32 +++++++++++++++---- .../me/drakeet/floo/DefaultIntentHandler.java | 16 ++++++++++ .../src/main/java/me/drakeet/floo/Floo.java | 2 +- .../java/me/drakeet/floo/IntentHandler.java | 19 +++++++++++ .../java/me/drakeet/floo/Preconditions.java | 21 ++++++++++++ 7 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 library/src/main/java/me/drakeet/floo/DefaultIntentHandler.java create mode 100644 library/src/main/java/me/drakeet/floo/IntentHandler.java create mode 100644 library/src/main/java/me/drakeet/floo/Preconditions.java diff --git a/README.md b/README.md index a9efd07..8b26fdc 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ public class App extends Application { Floo.configuration() .setDebugEnabled(BuildConfig.DEBUG) + .setIntentHandler(new FragmentIntentHandler()) // DefaultIntentHandler by default .addRequestInterceptor(new LogInterceptor("Request")) .addTargetInterceptor(new LogInterceptor("Target")) .addTargetNotFoundHandler(new WebHandler()) diff --git a/README_CN.md b/README_CN.md index 0819c23..5949eff 100644 --- a/README_CN.md +++ b/README_CN.md @@ -45,6 +45,7 @@ public class App extends Application { Floo.configuration() .setDebugEnabled(BuildConfig.DEBUG) + .setIntentHandler(new FragmentIntentHandler()) // DefaultIntentHandler by default .addRequestInterceptor(new LogInterceptor("Request")) .addTargetInterceptor(new LogInterceptor("Target")) .addTargetNotFoundHandler(new WebHandler()) diff --git a/library/src/main/java/me/drakeet/floo/Configuration.java b/library/src/main/java/me/drakeet/floo/Configuration.java index 7b0e21a..b0b7ef6 100644 --- a/library/src/main/java/me/drakeet/floo/Configuration.java +++ b/library/src/main/java/me/drakeet/floo/Configuration.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Map; +import static me.drakeet.floo.Preconditions.checkNotNull; + /** * A delegate for floo to hold the configuration fields * @@ -38,6 +40,7 @@ public class Configuration { private @NonNull final List targetNotFoundHandlers; private @NonNull final List requestInterceptors; private @NonNull final List targetInterceptors; + private @NonNull IntentHandler intentHandler = new DefaultIntentHandler(); private boolean debug = false; private boolean stackObserverInitialized = false; @@ -51,12 +54,14 @@ public class Configuration { void apply(@NonNull final Map map) { + checkNotNull(map); targetMap.set(new HashMap<>(map)); } @NonNull public Configuration addRequestInterceptor(@NonNull Interceptor requestInterceptor) { + checkNotNull(requestInterceptor); requestInterceptors.add(requestInterceptor); return this; } @@ -64,6 +69,7 @@ public Configuration addRequestInterceptor(@NonNull Interceptor requestIntercept @NonNull public Configuration addTargetInterceptor(@NonNull Interceptor responseInterceptor) { + checkNotNull(responseInterceptor); targetInterceptors.add(responseInterceptor); return this; } @@ -71,6 +77,7 @@ public Configuration addTargetInterceptor(@NonNull Interceptor responseIntercept @NonNull public Configuration addTargetNotFoundHandler(@NonNull TargetNotFoundHandler handler) { + checkNotNull(handler); targetNotFoundHandlers.add(handler); return this; } @@ -90,35 +97,48 @@ public Configuration setDebugEnabled(boolean debug) { } - boolean isDebugEnabled() { return debug; } + public boolean isDebugEnabled() { return debug; } + + + public void setIntentHandler(@NonNull IntentHandler intentHandler) { + checkNotNull(intentHandler); + this.intentHandler = intentHandler; + } + + + @NonNull + public IntentHandler getIntentHandler() { + return intentHandler; + } @NonNull - List getTargetNotFoundHandlers() { + public List getTargetNotFoundHandlers() { return targetNotFoundHandlers; } @NonNull - List getRequestInterceptors() { + public List getRequestInterceptors() { return requestInterceptors; } @NonNull - List getTargetInterceptors() { + public List getTargetInterceptors() { return targetInterceptors; } @Nullable - Target getTarget(@NonNull String url) { + public Target getTarget(@NonNull String url) { + checkNotNull(url); return targetMap.getTarget(url); } @NonNull - Map getTargetMap() { + public Map getTargetMap() { return targetMap.get(); } diff --git a/library/src/main/java/me/drakeet/floo/DefaultIntentHandler.java b/library/src/main/java/me/drakeet/floo/DefaultIntentHandler.java new file mode 100644 index 0000000..f327afb --- /dev/null +++ b/library/src/main/java/me/drakeet/floo/DefaultIntentHandler.java @@ -0,0 +1,16 @@ +package me.drakeet.floo; + +import android.content.Context; +import android.content.Intent; +import android.support.annotation.NonNull; + +/** + * @author drakeet + */ +public class DefaultIntentHandler implements IntentHandler { + + @Override + public void onIntentCreated(@NonNull Context context, @NonNull Intent intent) { + context.startActivity(intent); + } +} diff --git a/library/src/main/java/me/drakeet/floo/Floo.java b/library/src/main/java/me/drakeet/floo/Floo.java index a3c27ca..b3f65e5 100644 --- a/library/src/main/java/me/drakeet/floo/Floo.java +++ b/library/src/main/java/me/drakeet/floo/Floo.java @@ -187,7 +187,7 @@ public Navigation appendQueryParameter(@NonNull String key, @NonNull String valu public void start() { final Intent intent = getIntent(); if (intent != null) { - context.startActivity(intent); + configuration().getIntentHandler().onIntentCreated(context, intent); } else { log(WARN, "The target Intent is null, " + "it may has been intercepted or dispatched to your TargetNotFoundHandlers."); diff --git a/library/src/main/java/me/drakeet/floo/IntentHandler.java b/library/src/main/java/me/drakeet/floo/IntentHandler.java new file mode 100644 index 0000000..8d48653 --- /dev/null +++ b/library/src/main/java/me/drakeet/floo/IntentHandler.java @@ -0,0 +1,19 @@ +package me.drakeet.floo; + +import android.content.Context; +import android.content.Intent; +import android.support.annotation.NonNull; + +/** + * @author drakeet + */ +public interface IntentHandler { + + /** + * Called immediately after intent has created on {@link Floo#start()}. + * + * @param context The context. + * @param intent The intent. + */ + void onIntentCreated(@NonNull Context context, @NonNull Intent intent); +} diff --git a/library/src/main/java/me/drakeet/floo/Preconditions.java b/library/src/main/java/me/drakeet/floo/Preconditions.java new file mode 100644 index 0000000..979dff5 --- /dev/null +++ b/library/src/main/java/me/drakeet/floo/Preconditions.java @@ -0,0 +1,21 @@ +package me.drakeet.floo; + +import android.support.annotation.NonNull; + +/** + * @author drakeet + */ +public final class Preconditions { + + @NonNull + @SuppressWarnings("ConstantConditions") + public static T checkNotNull(@NonNull final T object) { + if (object == null) { + throw new NullPointerException(); + } + return object; + } + + + private Preconditions() {} +}