From 50b10c1601ef5a16f4d416ff15144f670d41b06f Mon Sep 17 00:00:00 2001 From: Vikram Sharma Date: Mon, 13 May 2019 17:53:24 +0530 Subject: [PATCH 01/10] param support Added for GET requests --- .../barricade/{random => jokes}/failure.json | 0 .../barricade/jokes/random/failure.json | 2 + .../barricade/{ => jokes}/random/success.json | 0 .../main/assets/barricade/jokes/success.json | 6 + .../sample/api/ChuckNorrisApiService.java | 21 +++- .../sample/api/ChuckNorrisApiServiceTest.java | 4 +- barricade-annotations/build.gradle | 29 ++++- .../barricade/IBarricadeConfig.java | 1 + .../barricade/annotation/Barricade.java | 4 +- .../barricade/annotation/Params.java | 9 ++ .../barricade/annotation/QueryParams.java | 9 ++ .../barricade/annotation/RequestJson.java | 9 ++ .../barricade/annotation/Response.java | 2 +- .../response/BarricadeResponseSet.java | 3 +- barricade-compiler/build.gradle | 3 +- .../compiler/BarricadeProcessor.java | 116 +++++++++++------- .../barricade/compiler/CodeGenerator.java | 49 +++++++- barricade/build.gradle | 40 +++++- .../barricade/ApplicationTest.java | 13 -- .../com/mutualmobile/barricade/Barricade.java | 21 ++++ .../barricade/BarricadeInterceptor.java | 42 ++++++- build.gradle | 3 + gradle.properties | 2 +- 23 files changed, 304 insertions(+), 84 deletions(-) rename app/src/main/assets/barricade/{random => jokes}/failure.json (100%) create mode 100644 app/src/main/assets/barricade/jokes/random/failure.json rename app/src/main/assets/barricade/{ => jokes}/random/success.json (100%) create mode 100644 app/src/main/assets/barricade/jokes/success.json create mode 100644 barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Params.java create mode 100644 barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/QueryParams.java create mode 100644 barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/RequestJson.java delete mode 100644 barricade/src/androidTest/java/com/mutualmobile/barricade/ApplicationTest.java diff --git a/app/src/main/assets/barricade/random/failure.json b/app/src/main/assets/barricade/jokes/failure.json similarity index 100% rename from app/src/main/assets/barricade/random/failure.json rename to app/src/main/assets/barricade/jokes/failure.json diff --git a/app/src/main/assets/barricade/jokes/random/failure.json b/app/src/main/assets/barricade/jokes/random/failure.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/app/src/main/assets/barricade/jokes/random/failure.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/app/src/main/assets/barricade/random/success.json b/app/src/main/assets/barricade/jokes/random/success.json similarity index 100% rename from app/src/main/assets/barricade/random/success.json rename to app/src/main/assets/barricade/jokes/random/success.json diff --git a/app/src/main/assets/barricade/jokes/success.json b/app/src/main/assets/barricade/jokes/success.json new file mode 100644 index 0000000..3161c2a --- /dev/null +++ b/app/src/main/assets/barricade/jokes/success.json @@ -0,0 +1,6 @@ +{ + "icon_url" : "https://assets.chucknorris.host/img/avatar/chuck-norris.png", + "id" : "gX6RQU9EQxC4oZd6kVeiSw", + "url" : "http://api.chucknorris.io/jokes/gX6RQU9EQxC4oZd6kVeiSw", + "value" : "When Chuck Norris was a kid, he made his mom eat her vegetables" +} \ No newline at end of file diff --git a/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java b/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java index 2b13567..9a46bbf 100644 --- a/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java +++ b/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java @@ -1,19 +1,36 @@ package com.mutualmobile.barricade.sample.api; import com.mutualmobile.barricade.annotation.Barricade; +import com.mutualmobile.barricade.annotation.Params; +import com.mutualmobile.barricade.annotation.QueryParams; import com.mutualmobile.barricade.annotation.Response; import com.mutualmobile.barricade.sample.api.model.Joke; - import java.util.List; import retrofit2.Call; import retrofit2.http.GET; +import retrofit2.http.Query; public interface ChuckNorrisApiService { - @GET("/jokes/random") @Barricade(endpoint = "random", responses = { + @GET("/jokes/random") @Barricade(endpoint = "/jokes/random", responses = { @Response(fileName = "success.json",isDefault = true), @Response(fileName = "failure.json", statusCode = 401) }) Call getRandomJoke(); + + + @GET("/jokes/random") + @Barricade(endpoint = "/jokes/random", + queryParams = { + @QueryParams( params = {@Params(name = "test",value = "success")} , + response = @Response(fileName = "success.json",isDefault = true)), + @QueryParams( params = {@Params(name = "test",value = "failure")} , + response = @Response(fileName = "failure.json", statusCode = 401)) + }, + responses = { + @Response(fileName = "success.json",isDefault = true), + @Response(fileName = "failure.json", statusCode = 401) + }) Call getRandomJoke(@Query("test")String test); + @GET("/jokes/categories") Call> getJokeCategories(); } diff --git a/app/src/test/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiServiceTest.java b/app/src/test/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiServiceTest.java index e242190..7646093 100644 --- a/app/src/test/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiServiceTest.java +++ b/app/src/test/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiServiceTest.java @@ -52,7 +52,7 @@ public class ChuckNorrisApiServiceTest { @Test public void canFetchRandomJokeFromBarricade() throws IOException { barricade.setEnabled(true); - Response response = getApiService().getRandomJoke().execute(); + Response response = getApiService().getRandomJoke("success").execute(); assertThat(response.isSuccessful()).isTrue(); assertThat(response.code()).isEqualTo(200); @@ -71,7 +71,7 @@ public class ChuckNorrisApiServiceTest { } @Test public void canSetBarricadeResponseAtRunTime() throws IOException { - barricade.setEnabled(true).setResponse(BarricadeConfig.Endpoints.RANDOM, BarricadeConfig.Responses.Random.FAILURE); + barricade.setEnabled(true).setResponse(BarricadeConfig.Endpoints.JOKESRANDOM, BarricadeConfig.Responses.Jokesrandom.FAILURE); Response response = getApiService().getRandomJoke().execute(); assertThat(response.isSuccessful()).isFalse(); assertThat(response.code()).isEqualTo(401); diff --git a/barricade-annotations/build.gradle b/barricade-annotations/build.gradle index 916f19d..c150a13 100644 --- a/barricade-annotations/build.gradle +++ b/barricade-annotations/build.gradle @@ -1,5 +1,26 @@ +buildscript { + repositories { + google() + mavenCentral() + mavenLocal() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.3.2' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' + } +} + + apply plugin: 'java' +apply plugin: 'android-maven' +apply plugin: 'java-library' +configurations { + runtime { + extendsFrom compile + } +} sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 @@ -7,7 +28,7 @@ ext { bintrayName = 'barricade-annotations' libraryName = 'Barricade Annotations' } - -dependencies {} - -apply from: '../bintray.gradle' \ No newline at end of file +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) +} +//apply from: '../bintray.gradle' \ No newline at end of file diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/IBarricadeConfig.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/IBarricadeConfig.java index 2c75fee..2602fd6 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/IBarricadeConfig.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/IBarricadeConfig.java @@ -11,4 +11,5 @@ public interface IBarricadeConfig { HashMap getConfigs(); BarricadeResponse getResponseForEndpoint(String endpoint); + BarricadeResponse getResponseForParams(String endpoint,String params); } diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Barricade.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Barricade.java index 86ebd79..30203bf 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Barricade.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Barricade.java @@ -4,6 +4,7 @@ import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Target; +import java.util.HashMap; import static java.lang.annotation.RetentionPolicy.CLASS; @@ -12,6 +13,7 @@ */ @Documented @Retention(CLASS) @Target(ElementType.METHOD) public @interface Barricade { String endpoint() default ""; - + QueryParams[] queryParams() default {}; + RequestJson[] requestJson() default {}; Response[] responses() default {}; } diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Params.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Params.java new file mode 100644 index 0000000..e195a23 --- /dev/null +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Params.java @@ -0,0 +1,9 @@ +package com.mutualmobile.barricade.annotation; + +/** + * Annotation to declare a params of API. It has sensible defaults for most params. + */ +public @interface Params { + String name(); + String value(); +} diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/QueryParams.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/QueryParams.java new file mode 100644 index 0000000..4ab7912 --- /dev/null +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/QueryParams.java @@ -0,0 +1,9 @@ +package com.mutualmobile.barricade.annotation; + +/** + * Created by Vikram on 09/05/19. + */ +public @interface QueryParams { + Params[] params(); + Response response(); +} diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/RequestJson.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/RequestJson.java new file mode 100644 index 0000000..024ee96 --- /dev/null +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/RequestJson.java @@ -0,0 +1,9 @@ +package com.mutualmobile.barricade.annotation; + +/** + * Created by Vikram on 09/05/19. + */ +public @interface RequestJson { + String body(); + Response response(); +} diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Response.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Response.java index 26707b0..7bc9fe3 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Response.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Response.java @@ -11,6 +11,6 @@ int statusCode() default 200; String type() default "application/json"; - + String paramCheck = ""; boolean isDefault() default false; } diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/response/BarricadeResponseSet.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/response/BarricadeResponseSet.java index b7d08a3..fb68479 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/response/BarricadeResponseSet.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/response/BarricadeResponseSet.java @@ -1,5 +1,6 @@ package com.mutualmobile.barricade.response; +import com.mutualmobile.barricade.annotation.QueryParams; import java.util.List; /** @@ -15,4 +16,4 @@ public BarricadeResponseSet(List responses, int defaultIndex) this.defaultIndex = defaultIndex; this.originalDefaultIndex = defaultIndex; } -} +} \ No newline at end of file diff --git a/barricade-compiler/build.gradle b/barricade-compiler/build.gradle index 7037d16..4a847e0 100644 --- a/barricade-compiler/build.gradle +++ b/barricade-compiler/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'java' +apply plugin: 'android-maven' sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 @@ -15,4 +16,4 @@ dependencies { implementation project(':barricade-annotations') } -apply from: '../bintray.gradle' \ No newline at end of file +//apply from: '../bintray.gradle' \ No newline at end of file diff --git a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java index 013bd82..95e2dad 100644 --- a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java +++ b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java @@ -2,6 +2,9 @@ import com.google.auto.service.AutoService; import com.mutualmobile.barricade.annotation.Barricade; +import com.mutualmobile.barricade.annotation.Params; +import com.mutualmobile.barricade.annotation.QueryParams; +import com.mutualmobile.barricade.annotation.RequestJson; import com.mutualmobile.barricade.annotation.Response; import com.mutualmobile.barricade.response.BarricadeResponse; import com.mutualmobile.barricade.response.BarricadeResponseSet; @@ -9,6 +12,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.Messager; @@ -29,59 +33,77 @@ */ @AutoService(Processor.class) public class BarricadeProcessor extends AbstractProcessor { - private Messager messager; + private Messager messager; - @Override public synchronized void init(ProcessingEnvironment processingEnvironment) { - super.init(processingEnvironment); - messager = processingEnvironment.getMessager(); - } + @Override public synchronized void init(ProcessingEnvironment processingEnvironment) { + super.init(processingEnvironment); + messager = processingEnvironment.getMessager(); + } - @Override public Set getSupportedAnnotationTypes() { - return singleton(Barricade.class.getCanonicalName()); - } + @Override public Set getSupportedAnnotationTypes() { + return singleton(Barricade.class.getCanonicalName()); + } - @Override public SourceVersion getSupportedSourceVersion() { - return latestSupported(); - } + @Override public SourceVersion getSupportedSourceVersion() { + return latestSupported(); + } - @Override - public boolean process(Set set, RoundEnvironment roundEnvironment) { - try { - HashMap configs = new HashMap<>(); - // Iterate over all @Barricade annotated elements - for (Element annotatedElement : roundEnvironment.getElementsAnnotatedWith(Barricade.class)) { - Barricade barricade = annotatedElement.getAnnotation(Barricade.class); - messager.printMessage(NOTE, "[Barricade] Processing endpoint: " + barricade.endpoint()); + @Override public boolean process(Set set, RoundEnvironment roundEnvironment) { + try { + HashMap configs = new HashMap<>(); + HashMap> paramConfig = new HashMap<>(); + // Iterate over all @Barricade annotated elements + for (Element annotatedElement : roundEnvironment.getElementsAnnotatedWith(Barricade.class)) { + Barricade barricade = annotatedElement.getAnnotation(Barricade.class); + messager.printMessage(NOTE, "[Barricade] Processing endpoint: " + barricade.endpoint()); + if (barricade.queryParams().length > 0) { + Map responseMap = new HashMap<>(barricade.queryParams().length); + for (QueryParams queryParams : barricade.queryParams()) { + StringBuilder query = new StringBuilder(); + for (Params params : queryParams.params()) { + query.append(params.name()).append("=").append(params.value()).append("&"); + } + responseMap.put(query.toString(), new BarricadeResponse(queryParams.response())); + } + paramConfig.put(barricade.endpoint(), responseMap); + } else if (barricade.requestJson().length > 0) { + Map responseMap = new HashMap<>(barricade.queryParams().length); + for (RequestJson postJson : barricade.requestJson()) { + String query = postJson.body(); + responseMap.put(query, new BarricadeResponse(postJson.response())); + } + paramConfig.put(barricade.endpoint(), responseMap); + } else { + List responses = new ArrayList<>(barricade.responses().length); + int defaultIndex = 0; - List responses = new ArrayList<>(barricade.responses().length); - int defaultIndex = 0; + for (int i = 0; i < barricade.responses().length; i++) { + Response option = barricade.responses()[i]; + responses.add(new BarricadeResponse(option)); + if (option.isDefault()) { + defaultIndex = i; + } + } + configs.put(barricade.endpoint(), new BarricadeResponseSet(responses, defaultIndex)); + } + } - for (int i = 0; i < barricade.responses().length; i++) { - Response option = barricade.responses()[i]; - responses.add(new BarricadeResponse(option)); - if (option.isDefault()) { - defaultIndex = i; - } - } - configs.put(barricade.endpoint(), new BarricadeResponseSet(responses, defaultIndex)); - } + // This method is called multiple times, but we want to generate code only once + if (!configs.isEmpty()||!paramConfig.isEmpty()) { + generateCode(paramConfig,configs); + } + } catch (Exception e) { + messager.printMessage(ERROR, "Couldn't process class:" + e.getMessage()); + } - // This method is called multiple times, but we want to generate code only once - if (!configs.isEmpty()) { - generateCode(configs); - } - } catch (Exception e) { - messager.printMessage(ERROR, "Couldn't process class:" + e.getMessage()); - } + return true; + } - return true; - } - - private void generateCode(HashMap configs) throws IOException { - if (configs.isEmpty()) { - messager.printMessage(ERROR, "Couldn't find any endpoints to barricade"); - } else { - CodeGenerator.generateClass(processingEnv, configs, messager); - } - } + private void generateCode(HashMap> paramConfigs,HashMap configs) throws IOException { + if (configs.isEmpty()&& paramConfigs.isEmpty()) { + messager.printMessage(ERROR, "Couldn't find any endpoints"); + } else { + CodeGenerator.generateClass(processingEnv,paramConfigs,configs, messager); + } + } } diff --git a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java index 1abb825..60d2a44 100755 --- a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java +++ b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java @@ -25,6 +25,7 @@ import static javax.lang.model.element.Modifier.PRIVATE; import static javax.lang.model.element.Modifier.PUBLIC; import static javax.lang.model.element.Modifier.STATIC; +import static javax.tools.Diagnostic.Kind.ERROR; /** * Generates code for a Barricade configuration. @@ -37,9 +38,15 @@ final class CodeGenerator { private static final ClassName TYPE_BARRICADE_RESPONSE_SET = ClassName.get(BarricadeResponseSet.class); + private static final ClassName TYPE_BARRICADE_RESPONSE = + ClassName.get(BarricadeResponse.class); private static final ParameterizedTypeName TYPE_CONFIG = ParameterizedTypeName.get(ClassName.get(HashMap.class), ClassName.get(String.class), ClassName.get(BarricadeResponseSet.class)); + private static final ParameterizedTypeName PARAM_CONFIG = + ParameterizedTypeName.get(ClassName.get(HashMap.class), ClassName.get(String.class), + ParameterizedTypeName.get(ClassName.get(Map.class), ClassName.get(String.class), + ClassName.get(BarricadeResponse.class))); private CodeGenerator() { } @@ -49,10 +56,11 @@ private CodeGenerator() { * * @param processingEnv Processing environment * @param configs Configuration detected by annotation processing + * @param paramConfigs parameters detected by annotation processing * @param messager Messager to print logs * @throws IOException */ - static void generateClass(ProcessingEnvironment processingEnv, + static void generateClass(ProcessingEnvironment processingEnv,HashMap> paramConfigs, HashMap configs, Messager messager) throws IOException { messager.printMessage(Diagnostic.Kind.NOTE, "Generating configuration code..."); @@ -60,24 +68,28 @@ static void generateClass(ProcessingEnvironment processingEnv, TypeSpec.Builder classBuilder = classBuilder(CLASS_NAME).addModifiers(PUBLIC, FINAL); FieldSpec valuesField = FieldSpec.builder(TYPE_CONFIG, "configs").addModifiers(PRIVATE).build(); + FieldSpec paramsField = FieldSpec.builder(PARAM_CONFIG, "paramConfigs").addModifiers(PRIVATE).build(); FieldSpec instanceField = FieldSpec.builder(ClassName.get(PACKAGE_NAME, CLASS_NAME), "barricadeConfig") .addModifiers(PRIVATE, STATIC) .build(); MethodSpec.Builder instanceMethodBuilder = generateGetInstanceMethodBuilder(); - MethodSpec.Builder constructorMethodBuilder = generateConstructorBuilder(configs, messager); - MethodSpec.Builder valuesMethod = generateGetConfigsMethodBuilder(); + MethodSpec.Builder constructorMethodBuilder = generateConstructorBuilder(configs,paramConfigs, messager); + MethodSpec.Builder valuesMethod = generateGetConfigsMethodBuilder(); MethodSpec.Builder getResponseMethodBuilder = generateGetResponseMethodBuilder(); + MethodSpec.Builder getResponseForParamsMethodBuilder = generateGetResponseForParamsMethodBuilder(); classBuilder.addType(generateEndpointsInnerClass(configs.keySet())); classBuilder.addType(generateResponsesInnerClass(configs)); classBuilder.addField(instanceField); classBuilder.addField(valuesField); + classBuilder.addField(paramsField); classBuilder.addMethod(instanceMethodBuilder.build()); classBuilder.addMethod(constructorMethodBuilder.build()); classBuilder.addMethod(valuesMethod.build()); classBuilder.addMethod(getResponseMethodBuilder.build()); + classBuilder.addMethod(getResponseForParamsMethodBuilder.build()); classBuilder.addSuperinterface(IBarricadeConfig.class); @@ -139,14 +151,15 @@ private static MethodSpec.Builder generateGetConfigsMethodBuilder() { } private static MethodSpec.Builder generateConstructorBuilder( - HashMap values, Messager messager) { + HashMap values,HashMap> paramConfigs, Messager messager) { MethodSpec.Builder methodBuilder = MethodSpec.constructorBuilder().addModifiers(PUBLIC); methodBuilder.addStatement("configs = new HashMap<>()"); + methodBuilder.addStatement("paramConfigs = new HashMap<>()"); for (Map.Entry entry : values.entrySet()) { BarricadeResponseSet barricadeResponseSet = entry.getValue(); - String listName = "barricadeResponsesFor" + entry.getKey(); + String listName = "barricadeResponsesFor" + entry.getKey().replaceAll("/",""); methodBuilder.addStatement("$T<$T> " + listName + " = new $T<>()", List.class, BarricadeResponse.class, ArrayList.class); @@ -161,6 +174,21 @@ private static MethodSpec.Builder generateConstructorBuilder( "configs.put($S, new $T(" + listName + ", " + barricadeResponseSet.defaultIndex + "))", entry.getKey(), TYPE_BARRICADE_RESPONSE_SET); } + for (Map.Entry> entry : paramConfigs.entrySet()) { + Map paramResponse = entry.getValue(); + String mapName = "paramValueMapFor" + entry.getKey().replaceAll("/",""); + + methodBuilder.addStatement("$T<$T,$T> " + mapName + " = new $T<>()", Map.class, String.class, + BarricadeResponse.class, HashMap.class); + + for (Map.Entry paramEntries : paramResponse.entrySet()) { + methodBuilder.addStatement(mapName + ".put($S,new $T($L, $S, $S))",paramEntries.getKey(), BarricadeResponse.class, + paramEntries.getValue().statusCode, paramEntries.getValue().responseFileName, + paramEntries.getValue().contentType); + } + methodBuilder.addStatement( + "paramConfigs.put($S," + mapName +")",entry.getKey()); + } return methodBuilder; } @@ -181,4 +209,15 @@ private static MethodSpec.Builder generateGetResponseMethodBuilder() { .addStatement("if(responseSet==null) return null") .addStatement("return responseSet.responses.get(responseSet.defaultIndex)"); } + + private static MethodSpec.Builder generateGetResponseForParamsMethodBuilder() { + return MethodSpec.methodBuilder("getResponseForParams") + .addModifiers(PUBLIC) + .addParameter(String.class, "endpoint") + .addParameter(String.class,"params") + .returns(BarricadeResponse.class) + .addStatement("$T<$T,$T> paramMap = paramConfigs.get(endpoint)", Map.class,String.class,BarricadeResponse.class) + .addStatement("if(paramMap==null) return null") + .addStatement("return paramMap.get(params)"); + } } diff --git a/barricade/build.gradle b/barricade/build.gradle index 292eba7..3d0fe06 100644 --- a/barricade/build.gradle +++ b/barricade/build.gradle @@ -1,8 +1,44 @@ +buildscript { + repositories { + google() + mavenCentral() + mavenLocal() + jcenter() + + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.3.2' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' + } +} + apply plugin: 'com.android.library' +apply plugin: 'android-maven' +apply plugin: 'maven-publish' + + +configurations { + runtime { + extendsFrom compile + } +} sourceCompatibility = 1.7 targetCompatibility = 1.7 + +publishing { + publications { + library(MavenPublication) { + setArtifactId(libraryName) + version VERSION_NAME + artifact(bundleReleaseAar) + } + } +} + + android { compileSdkVersion 28 buildToolsVersion '28.0.3' @@ -35,7 +71,7 @@ ext { } dependencies { - implementation project(':barricade-annotations') + api project(':barricade-annotations') implementation "androidx.appcompat:appcompat:${SUPPORT_LIB_VERSION}" implementation "androidx.legacy:legacy-support-v4:${SUPPORT_LIB_VERSION}" @@ -48,4 +84,4 @@ dependencies { androidTestImplementation "androidx.annotation:annotation:${SUPPORT_LIB_VERSION}" } -apply from: '../bintray.gradle' \ No newline at end of file +//apply from: '../bintray.gradle' \ No newline at end of file diff --git a/barricade/src/androidTest/java/com/mutualmobile/barricade/ApplicationTest.java b/barricade/src/androidTest/java/com/mutualmobile/barricade/ApplicationTest.java deleted file mode 100644 index 9807aa5..0000000 --- a/barricade/src/androidTest/java/com/mutualmobile/barricade/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mutualmobile.barricade; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java b/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java index 6c71904..ea4024f 100644 --- a/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java +++ b/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java @@ -129,6 +129,27 @@ okhttp3.Response getResponse(Interceptor.Chain chain, String endpoint) { .build(); } + /** + * Returns a barricaded response for an endpoint and matching params + * + * @param chain OkHttp Interceptor chain + * @param endpoint Endpoint that is being hit + * @return Barricaded response (if available), null otherwise + */ + okhttp3.Response getResponseForParams(Interceptor.Chain chain, String endpoint,String params) { + BarricadeResponse barricadeResponse = barricadeConfig.getResponseForParams(endpoint,params); + if (barricadeResponse == null) { + return null; + } + String fileResponse = getResponseFromFile(endpoint, barricadeResponse.responseFileName); + return new okhttp3.Response.Builder().code(barricadeResponse.statusCode).message("Barricade OK") + .request(chain.request()) + .protocol(Protocol.HTTP_1_0) + .body(ResponseBody.create(MediaType.parse(barricadeResponse.contentType), fileResponse.getBytes())) + .addHeader("content-type", barricadeResponse.contentType) + .build(); + } + public HashMap getConfig() { return barricadeConfig.getConfigs(); } diff --git a/barricade/src/main/java/com/mutualmobile/barricade/BarricadeInterceptor.java b/barricade/src/main/java/com/mutualmobile/barricade/BarricadeInterceptor.java index cec8721..3948cc0 100644 --- a/barricade/src/main/java/com/mutualmobile/barricade/BarricadeInterceptor.java +++ b/barricade/src/main/java/com/mutualmobile/barricade/BarricadeInterceptor.java @@ -1,6 +1,7 @@ package com.mutualmobile.barricade; import java.io.IOException; +import java.util.Iterator; import java.util.List; import java.util.logging.Logger; import okhttp3.Interceptor; @@ -17,10 +18,14 @@ public class BarricadeInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { if (barricade.isEnabled()) { Request request = chain.request(); - List pathSegments = request.url().pathSegments(); - String endpoint = pathSegments.get(pathSegments.size() - 1); - - Response response = barricade.getResponse(chain, endpoint); + String endpoint = request.url().encodedPath(); + String queryString = getParams(request); + Response response = null; + if(!queryString.isEmpty()){ + response = barricade.getResponseForParams(chain, endpoint,queryString); + }else { + response = barricade.getResponse(chain, endpoint); + } if (response != null) { try { Thread.sleep(barricade.getDelay()); @@ -36,4 +41,33 @@ public class BarricadeInterceptor implements Interceptor { return chain.proceed(chain.request()); } } + + private String getParams(Request request){ + String requestType = request.method(); + switch (requestType.trim().toUpperCase()){ + case "PUT" : + case "POST" : { + //Todo : fetch parameters from post request + return ""; + } + case "GET" : + default : { + return getFormattedQuery(request); + } + } + } + + + private String getFormattedQuery(Request request){ + Iterator paramIterator = request.url().queryParameterNames().iterator(); + StringBuilder query = new StringBuilder(); + while(paramIterator.hasNext()){ + String paramName =paramIterator.next(); + Listvalues = request.url().queryParameterValues(paramName); + for(String value: values){ + query.append(paramName).append("=").append(value).append("&"); + } + } + return query.toString(); + } } diff --git a/build.gradle b/build.gradle index 4f10e86..640163f 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ buildscript { repositories { + mavenLocal() jcenter() google() } @@ -17,6 +18,7 @@ buildscript { allprojects { repositories { + mavenLocal() google() jcenter() } @@ -25,6 +27,7 @@ allprojects { task clean(type: Delete) { delete rootProject.buildDir } +project.version = '0.1.9-skyguard' ext { OKHTTP_VERSION = "3.8.0" diff --git a/gradle.properties b/gradle.properties index 6562b23..5611b9d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true GROUP=com.mutualmobile -VERSION_NAME=0.1.8 +VERSION_NAME=0.1.9 POM_DESCRIPTION=A network interceptor for OkHttp and Retrofit to return mocked data POM_SITE_URL=https://github.com/mutualmobile/Barricade POM_GIT_URL=scm:git:git://github.com/mutualmobile/Barricade.git From 9c9b0fe909f49d33798c48bf49838b741c5baa53 Mon Sep 17 00:00:00 2001 From: Kishore Babu Date: Mon, 20 May 2019 14:39:22 +0530 Subject: [PATCH 02/10] Fix: Can now install artifacts into local maven repository --- barricade-annotations/build.gradle | 29 ++++------------------- barricade-compiler/build.gradle | 3 +-- barricade/build.gradle | 38 +----------------------------- build.gradle | 8 +++---- 4 files changed, 9 insertions(+), 69 deletions(-) diff --git a/barricade-annotations/build.gradle b/barricade-annotations/build.gradle index c150a13..916f19d 100644 --- a/barricade-annotations/build.gradle +++ b/barricade-annotations/build.gradle @@ -1,26 +1,5 @@ -buildscript { - repositories { - google() - mavenCentral() - mavenLocal() - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.3.2' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' - } -} - - apply plugin: 'java' -apply plugin: 'android-maven' -apply plugin: 'java-library' -configurations { - runtime { - extendsFrom compile - } -} sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 @@ -28,7 +7,7 @@ ext { bintrayName = 'barricade-annotations' libraryName = 'Barricade Annotations' } -dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) -} -//apply from: '../bintray.gradle' \ No newline at end of file + +dependencies {} + +apply from: '../bintray.gradle' \ No newline at end of file diff --git a/barricade-compiler/build.gradle b/barricade-compiler/build.gradle index 4a847e0..7037d16 100644 --- a/barricade-compiler/build.gradle +++ b/barricade-compiler/build.gradle @@ -1,5 +1,4 @@ apply plugin: 'java' -apply plugin: 'android-maven' sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 @@ -16,4 +15,4 @@ dependencies { implementation project(':barricade-annotations') } -//apply from: '../bintray.gradle' \ No newline at end of file +apply from: '../bintray.gradle' \ No newline at end of file diff --git a/barricade/build.gradle b/barricade/build.gradle index 3d0fe06..93ace5a 100644 --- a/barricade/build.gradle +++ b/barricade/build.gradle @@ -1,44 +1,8 @@ -buildscript { - repositories { - google() - mavenCentral() - mavenLocal() - jcenter() - - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.3.2' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' - } -} - apply plugin: 'com.android.library' -apply plugin: 'android-maven' -apply plugin: 'maven-publish' - - -configurations { - runtime { - extendsFrom compile - } -} sourceCompatibility = 1.7 targetCompatibility = 1.7 - -publishing { - publications { - library(MavenPublication) { - setArtifactId(libraryName) - version VERSION_NAME - artifact(bundleReleaseAar) - } - } -} - - android { compileSdkVersion 28 buildToolsVersion '28.0.3' @@ -84,4 +48,4 @@ dependencies { androidTestImplementation "androidx.annotation:annotation:${SUPPORT_LIB_VERSION}" } -//apply from: '../bintray.gradle' \ No newline at end of file +apply from: '../bintray.gradle' \ No newline at end of file diff --git a/build.gradle b/build.gradle index 640163f..7c1eccd 100644 --- a/build.gradle +++ b/build.gradle @@ -4,12 +4,12 @@ buildscript { repositories { mavenLocal() jcenter() - google() + google() } dependencies { classpath 'com.android.tools.build:gradle:3.2.1' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -18,7 +18,6 @@ buildscript { allprojects { repositories { - mavenLocal() google() jcenter() } @@ -27,11 +26,10 @@ allprojects { task clean(type: Delete) { delete rootProject.buildDir } -project.version = '0.1.9-skyguard' ext { OKHTTP_VERSION = "3.8.0" - SUPPORT_LIB_VERSION = '1.0.0-beta01' + SUPPORT_LIB_VERSION = '1.0.0' RETROFIT_VERSION = "2.4.0" ESPRESSO_VERSION = '3.1.0-alpha4' RUNNER_VERSION = '1.1.0-alpha4' From aa35d49f264721d203f9bf568e0c1030e1f79208 Mon Sep 17 00:00:00 2001 From: Kishore Babu Date: Mon, 20 May 2019 17:38:12 +0530 Subject: [PATCH 03/10] Fix: Disable Javadocs task --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 7c1eccd..fd259d5 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,7 @@ allprojects { google() jcenter() } + tasks.withType(Javadoc).all { enabled = false } } task clean(type: Delete) { From 166685fdec766d7e209f34c59f06eb8d4fe42b85 Mon Sep 17 00:00:00 2001 From: Kishore Babu Date: Mon, 20 May 2019 17:38:32 +0530 Subject: [PATCH 04/10] Change: Bump up version to 0.1.9.2-alpha01 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5611b9d..ee99267 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true GROUP=com.mutualmobile -VERSION_NAME=0.1.9 +VERSION_NAME=0.1.9.2-alpha01 POM_DESCRIPTION=A network interceptor for OkHttp and Retrofit to return mocked data POM_SITE_URL=https://github.com/mutualmobile/Barricade POM_GIT_URL=scm:git:git://github.com/mutualmobile/Barricade.git From 49ecbebd548d9ca8bae55ea0e5253dd6310bb276 Mon Sep 17 00:00:00 2001 From: vikramsharma Date: Mon, 20 May 2019 21:18:59 +0530 Subject: [PATCH 05/10] minor code refactoring fixes --- .../compiler/BarricadeProcessor.java | 37 ++++++++++------ .../barricade/compiler/CodeGenerator.java | 43 +++++++++++++++++-- 2 files changed, 64 insertions(+), 16 deletions(-) diff --git a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java index 95e2dad..7af83cd 100644 --- a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java +++ b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java @@ -57,21 +57,10 @@ Barricade barricade = annotatedElement.getAnnotation(Barricade.class); messager.printMessage(NOTE, "[Barricade] Processing endpoint: " + barricade.endpoint()); if (barricade.queryParams().length > 0) { - Map responseMap = new HashMap<>(barricade.queryParams().length); - for (QueryParams queryParams : barricade.queryParams()) { - StringBuilder query = new StringBuilder(); - for (Params params : queryParams.params()) { - query.append(params.name()).append("=").append(params.value()).append("&"); - } - responseMap.put(query.toString(), new BarricadeResponse(queryParams.response())); - } + Map responseMap = mapQueryParams(barricade); paramConfig.put(barricade.endpoint(), responseMap); } else if (barricade.requestJson().length > 0) { - Map responseMap = new HashMap<>(barricade.queryParams().length); - for (RequestJson postJson : barricade.requestJson()) { - String query = postJson.body(); - responseMap.put(query, new BarricadeResponse(postJson.response())); - } + Map responseMap = mapRequestJson(barricade); paramConfig.put(barricade.endpoint(), responseMap); } else { List responses = new ArrayList<>(barricade.responses().length); @@ -99,6 +88,28 @@ return true; } + + private Map mapQueryParams(Barricade barricade){ + Map responseMap = new HashMap<>(barricade.queryParams().length); + for (QueryParams queryParams : barricade.queryParams()) { + StringBuilder query = new StringBuilder(); + for (Params params : queryParams.params()) { + query.append(params.name()).append("=").append(params.value()).append("&"); + } + responseMap.put(query.toString(), new BarricadeResponse(queryParams.response())); + } + return responseMap; + } + + private Map mapRequestJson(Barricade barricade){ + Map responseMap = new HashMap<>(barricade.queryParams().length); + for (RequestJson postJson : barricade.requestJson()) { + String query = postJson.body(); + responseMap.put(query, new BarricadeResponse(postJson.response())); + } + return responseMap; + } + private void generateCode(HashMap> paramConfigs,HashMap configs) throws IOException { if (configs.isEmpty()&& paramConfigs.isEmpty()) { messager.printMessage(ERROR, "Couldn't find any endpoints"); diff --git a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java index 60d2a44..0b43dcc 100755 --- a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java +++ b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java @@ -47,6 +47,9 @@ final class CodeGenerator { ParameterizedTypeName.get(ClassName.get(HashMap.class), ClassName.get(String.class), ParameterizedTypeName.get(ClassName.get(Map.class), ClassName.get(String.class), ClassName.get(BarricadeResponse.class))); + private static final ParameterizedTypeName BARRICADE_RESPONSE_MAP = + ParameterizedTypeName.get(ClassName.get(Map.class), ClassName.get(String.class), + ClassName.get(BarricadeResponse.class)); private CodeGenerator() { } @@ -79,6 +82,7 @@ static void generateClass(ProcessingEnvironment processingEnv,HashMap paramMap = paramConfigs.get(endpoint)", Map.class,String.class,BarricadeResponse.class) - .addStatement("if(paramMap==null) return null") - .addStatement("return paramMap.get(params)"); + .beginControlFlow("if(paramMap==null)") + .beginControlFlow("for (String key : paramConfigs.keySet())") + .beginControlFlow("if (endpoint.endsWith(key))") + .addStatement("paramMap= paramConfigs.get(key)") + .addStatement("return getResponseFromParamMap(paramMap,params)") + .endControlFlow() + .endControlFlow() + .addStatement("return null") + .endControlFlow() + .addStatement("return getResponseFromParamMap(paramMap,params)"); + } + + private static MethodSpec.Builder generateGetResponseFromParamsMethodBuilder() { + return MethodSpec.methodBuilder("getResponseFromParamMap") + .addModifiers(PRIVATE) + .addParameter(BARRICADE_RESPONSE_MAP, "paramMap") + .addParameter(String.class,"params") + .returns(BarricadeResponse.class) + .addStatement("BarricadeResponse response = paramMap.get(params)") + .beginControlFlow("if(response == null)") + .beginControlFlow("for(String key:paramMap.keySet())") + .beginControlFlow("if(params.contains(key))") + .addStatement("return paramMap.get(key)") + .endControlFlow() + .endControlFlow() + .endControlFlow() + .addStatement("return response"); } } From b0f47031f51d1cf7b643c4d08565f1b31b413983 Mon Sep 17 00:00:00 2001 From: vikramsharma Date: Thu, 23 May 2019 20:01:31 +0530 Subject: [PATCH 06/10] UrlPath added to support path in Url for retrofit Retrofit Dynamic url path support added. Comments on file Annotation headers changed. --- .../assets/barricade/jokes/path/failure.json | 2 + .../assets/barricade/jokes/path/success.json | 6 +++ .../sample/api/ChuckNorrisApiService.java | 13 ++++-- .../sample/api/ChuckNorrisApiServiceTest.java | 20 +++++++++ .../barricade/annotation/Barricade.java | 1 + .../barricade/annotation/Params.java | 2 +- .../barricade/annotation/QueryParams.java | 2 +- .../barricade/annotation/RequestJson.java | 2 +- .../barricade/annotation/Response.java | 2 +- .../barricade/annotation/UrlPath.java | 12 ++++++ .../barricade/response/BarricadeResponse.java | 7 +++- .../compiler/BarricadeProcessor.java | 41 ++++++++++++------- .../barricade/compiler/CodeGenerator.java | 15 +++---- .../com/mutualmobile/barricade/Barricade.java | 6 +-- gradle.properties | 2 +- 15 files changed, 99 insertions(+), 34 deletions(-) create mode 100644 app/src/main/assets/barricade/jokes/path/failure.json create mode 100644 app/src/main/assets/barricade/jokes/path/success.json create mode 100644 barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/UrlPath.java diff --git a/app/src/main/assets/barricade/jokes/path/failure.json b/app/src/main/assets/barricade/jokes/path/failure.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/app/src/main/assets/barricade/jokes/path/failure.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/app/src/main/assets/barricade/jokes/path/success.json b/app/src/main/assets/barricade/jokes/path/success.json new file mode 100644 index 0000000..3161c2a --- /dev/null +++ b/app/src/main/assets/barricade/jokes/path/success.json @@ -0,0 +1,6 @@ +{ + "icon_url" : "https://assets.chucknorris.host/img/avatar/chuck-norris.png", + "id" : "gX6RQU9EQxC4oZd6kVeiSw", + "url" : "http://api.chucknorris.io/jokes/gX6RQU9EQxC4oZd6kVeiSw", + "value" : "When Chuck Norris was a kid, he made his mom eat her vegetables" +} \ No newline at end of file diff --git a/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java b/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java index 9a46bbf..7ca7076 100644 --- a/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java +++ b/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java @@ -4,10 +4,12 @@ import com.mutualmobile.barricade.annotation.Params; import com.mutualmobile.barricade.annotation.QueryParams; import com.mutualmobile.barricade.annotation.Response; +import com.mutualmobile.barricade.annotation.UrlPath; import com.mutualmobile.barricade.sample.api.model.Joke; import java.util.List; import retrofit2.Call; import retrofit2.http.GET; +import retrofit2.http.Path; import retrofit2.http.Query; public interface ChuckNorrisApiService { @@ -22,15 +24,20 @@ public interface ChuckNorrisApiService { @GET("/jokes/random") @Barricade(endpoint = "/jokes/random", queryParams = { - @QueryParams( params = {@Params(name = "test",value = "success")} , + @QueryParams( params = {@Params(name = "path",value = "success")} , response = @Response(fileName = "success.json",isDefault = true)), - @QueryParams( params = {@Params(name = "test",value = "failure")} , + @QueryParams( params = {@Params(name = "path",value = "failure")} , response = @Response(fileName = "failure.json", statusCode = 401)) }, responses = { @Response(fileName = "success.json",isDefault = true), @Response(fileName = "failure.json", statusCode = 401) - }) Call getRandomJoke(@Query("test")String test); + }) Call getRandomJoke(@Query("path")String test); + + @GET("/jokes/{path}") + @Barricade(endpoint = "/jokes/", + path = {@UrlPath(path = "path", responses = { @Response(fileName = "success.json") }) }) + Call getRandomJokePath(@Path("path") String test); @GET("/jokes/categories") Call> getJokeCategories(); } diff --git a/app/src/test/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiServiceTest.java b/app/src/test/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiServiceTest.java index 7646093..e4ba8ee 100644 --- a/app/src/test/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiServiceTest.java +++ b/app/src/test/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiServiceTest.java @@ -70,6 +70,26 @@ public class ChuckNorrisApiServiceTest { assertThat(joke.iconUrl).isEqualTo("https://assets.chucknorris.host/img/avatar/chuck-norris.png"); } + @Test public void canFetchRandomJokeFromBarricadeWithPathUrl() throws IOException { + barricade.setEnabled(true); + Response response = getApiService().getRandomJokePath("path").execute(); + + assertThat(response.isSuccessful()).isTrue(); + assertThat(response.code()).isEqualTo(200); + assertThat(response.body()).isNotNull(); + + Joke joke = response.body(); + assertThat(joke.id).isNotNull(); + assertThat(joke.id).isNotEmpty(); + assertThat(joke.id).isEqualTo("gX6RQU9EQxC4oZd6kVeiSw"); + assertThat(joke.value).isNotNull(); + assertThat(joke.value).isNotEmpty(); + assertThat(joke.value).isEqualTo("When Chuck Norris was a kid, he made his mom eat her vegetables"); + assertThat(joke.iconUrl).isNotNull(); + assertThat(joke.iconUrl).isNotEmpty(); + assertThat(joke.iconUrl).isEqualTo("https://assets.chucknorris.host/img/avatar/chuck-norris.png"); + } + @Test public void canSetBarricadeResponseAtRunTime() throws IOException { barricade.setEnabled(true).setResponse(BarricadeConfig.Endpoints.JOKESRANDOM, BarricadeConfig.Responses.Jokesrandom.FAILURE); Response response = getApiService().getRandomJoke().execute(); diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Barricade.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Barricade.java index 30203bf..828a665 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Barricade.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Barricade.java @@ -13,6 +13,7 @@ */ @Documented @Retention(CLASS) @Target(ElementType.METHOD) public @interface Barricade { String endpoint() default ""; + UrlPath[] path() default {}; QueryParams[] queryParams() default {}; RequestJson[] requestJson() default {}; Response[] responses() default {}; diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Params.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Params.java index e195a23..51efa52 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Params.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Params.java @@ -1,7 +1,7 @@ package com.mutualmobile.barricade.annotation; /** - * Annotation to declare a params of API. It has sensible defaults for most params. + * Annotation to declare a params of API. */ public @interface Params { String name(); diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/QueryParams.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/QueryParams.java index 4ab7912..8df7765 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/QueryParams.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/QueryParams.java @@ -1,7 +1,7 @@ package com.mutualmobile.barricade.annotation; /** - * Created by Vikram on 09/05/19. + * Annotations to declare query parameters and response for corresponding query params */ public @interface QueryParams { Params[] params(); diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/RequestJson.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/RequestJson.java index 024ee96..d3d1510 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/RequestJson.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/RequestJson.java @@ -1,7 +1,7 @@ package com.mutualmobile.barricade.annotation; /** - * Created by Vikram on 09/05/19. + * Annotations for Post Request body and corresponding response */ public @interface RequestJson { String body(); diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Response.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Response.java index 7bc9fe3..26707b0 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Response.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/Response.java @@ -11,6 +11,6 @@ int statusCode() default 200; String type() default "application/json"; - String paramCheck = ""; + boolean isDefault() default false; } diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/UrlPath.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/UrlPath.java new file mode 100644 index 0000000..06ee1a8 --- /dev/null +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/annotation/UrlPath.java @@ -0,0 +1,12 @@ +package com.mutualmobile.barricade.annotation; + +/** + * Support for dynamic url path + * @path will appended after endpoint. + * for eg. if your retrofit url is user/{path}/class + * you barricade code will be endpoint = user , UrlPath{ path= {expected value}/class} + */ +public @interface UrlPath { + String path(); + Response[] responses(); +} diff --git a/barricade-annotations/src/main/java/com/mutualmobile/barricade/response/BarricadeResponse.java b/barricade-annotations/src/main/java/com/mutualmobile/barricade/response/BarricadeResponse.java index 4a4c46d..68173dd 100644 --- a/barricade-annotations/src/main/java/com/mutualmobile/barricade/response/BarricadeResponse.java +++ b/barricade-annotations/src/main/java/com/mutualmobile/barricade/response/BarricadeResponse.java @@ -5,17 +5,20 @@ public class BarricadeResponse { public int statusCode; public String responseFileName; + public String filePath; public String contentType; - public BarricadeResponse(int statusCode, String responseFileName, String contentType) { + public BarricadeResponse(int statusCode, String responseFileName, String contentType,String filePath) { this.statusCode = statusCode; this.responseFileName = responseFileName; this.contentType = contentType; + this.filePath = filePath; } - public BarricadeResponse(Response response) { + public BarricadeResponse(Response response,String filePath) { this.statusCode = response.statusCode(); this.responseFileName = response.fileName(); this.contentType = response.type(); + this.filePath = filePath; } } diff --git a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java index 7af83cd..be9c0d1 100644 --- a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java +++ b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/BarricadeProcessor.java @@ -6,6 +6,7 @@ import com.mutualmobile.barricade.annotation.QueryParams; import com.mutualmobile.barricade.annotation.RequestJson; import com.mutualmobile.barricade.annotation.Response; +import com.mutualmobile.barricade.annotation.UrlPath; import com.mutualmobile.barricade.response.BarricadeResponse; import com.mutualmobile.barricade.response.BarricadeResponseSet; import java.io.IOException; @@ -55,25 +56,21 @@ // Iterate over all @Barricade annotated elements for (Element annotatedElement : roundEnvironment.getElementsAnnotatedWith(Barricade.class)) { Barricade barricade = annotatedElement.getAnnotation(Barricade.class); - messager.printMessage(NOTE, "[Barricade] Processing endpoint: " + barricade.endpoint()); + messager.printMessage(NOTE, "[Barricade] Processing Start for endpoint: " + barricade.endpoint()); if (barricade.queryParams().length > 0) { Map responseMap = mapQueryParams(barricade); paramConfig.put(barricade.endpoint(), responseMap); } else if (barricade.requestJson().length > 0) { Map responseMap = mapRequestJson(barricade); paramConfig.put(barricade.endpoint(), responseMap); - } else { - List responses = new ArrayList<>(barricade.responses().length); - int defaultIndex = 0; - - for (int i = 0; i < barricade.responses().length; i++) { - Response option = barricade.responses()[i]; - responses.add(new BarricadeResponse(option)); - if (option.isDefault()) { - defaultIndex = i; - } + } else if (barricade.path().length > 0) { + for (int i = 0; i < barricade.path().length; i++) { + UrlPath urlPath = barricade.path()[i]; + String endPoint = barricade.endpoint() + urlPath.path(); + configs.putAll(mapEndPoints(endPoint, urlPath.responses())); } - configs.put(barricade.endpoint(), new BarricadeResponseSet(responses, defaultIndex)); + } else { + configs.putAll(mapEndPoints(barricade.endpoint(), barricade.responses())); } } @@ -88,6 +85,22 @@ return true; } + private Map mapEndPoints(String endPoint, Response[] responses){ + Map responseMap = new HashMap(); + List responseList = new ArrayList(responses.length); + int defaultIndex = 0; + + for (int i = 0; i < responses.length; i++) { + Response option = responses[i]; + responseList.add(new BarricadeResponse(option,endPoint)); + if (option.isDefault()) { + defaultIndex = i; + } + } + responseMap.put(endPoint, new BarricadeResponseSet(responseList, defaultIndex)); + return responseMap; + } + private Map mapQueryParams(Barricade barricade){ Map responseMap = new HashMap<>(barricade.queryParams().length); @@ -96,7 +109,7 @@ private Map mapQueryParams(Barricade barricade){ for (Params params : queryParams.params()) { query.append(params.name()).append("=").append(params.value()).append("&"); } - responseMap.put(query.toString(), new BarricadeResponse(queryParams.response())); + responseMap.put(query.toString(), new BarricadeResponse(queryParams.response(),barricade.endpoint())); } return responseMap; } @@ -105,7 +118,7 @@ private Map mapRequestJson(Barricade barricade){ Map responseMap = new HashMap<>(barricade.queryParams().length); for (RequestJson postJson : barricade.requestJson()) { String query = postJson.body(); - responseMap.put(query, new BarricadeResponse(postJson.response())); + responseMap.put(query, new BarricadeResponse(postJson.response(),barricade.endpoint())); } return responseMap; } diff --git a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java index 0b43dcc..de1fa74 100755 --- a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java +++ b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java @@ -164,15 +164,15 @@ private static MethodSpec.Builder generateConstructorBuilder( for (Map.Entry entry : values.entrySet()) { BarricadeResponseSet barricadeResponseSet = entry.getValue(); - String listName = "barricadeResponsesFor" + entry.getKey().replaceAll("/",""); + String listName = "barricadeResponsesFor" + entry.getKey().replaceAll("/","").replaceAll("-",""); methodBuilder.addStatement("$T<$T> " + listName + " = new $T<>()", List.class, BarricadeResponse.class, ArrayList.class); for (BarricadeResponse barricadeResponse : barricadeResponseSet.responses) { - methodBuilder.addStatement(listName + ".add(new $T($L, $S, $S))", BarricadeResponse.class, + methodBuilder.addStatement(listName + ".add(new $T($L, $S, $S, $S))", BarricadeResponse.class, barricadeResponse.statusCode, barricadeResponse.responseFileName, - barricadeResponse.contentType); + barricadeResponse.contentType,entry.getKey()); } methodBuilder.addStatement( @@ -181,15 +181,15 @@ private static MethodSpec.Builder generateConstructorBuilder( } for (Map.Entry> entry : paramConfigs.entrySet()) { Map paramResponse = entry.getValue(); - String mapName = "paramValueMapFor" + entry.getKey().replaceAll("/",""); + String mapName = "paramValueMapFor" + entry.getKey().replaceAll("/","").replaceAll("-",""); methodBuilder.addStatement("$T<$T,$T> " + mapName + " = new $T<>()", Map.class, String.class, BarricadeResponse.class, HashMap.class); for (Map.Entry paramEntries : paramResponse.entrySet()) { - methodBuilder.addStatement(mapName + ".put($S,new $T($L, $S, $S))",paramEntries.getKey(), BarricadeResponse.class, + methodBuilder.addStatement(mapName + ".put($S,new $T($L, $S, $S, $S))",paramEntries.getKey(), BarricadeResponse.class, paramEntries.getValue().statusCode, paramEntries.getValue().responseFileName, - paramEntries.getValue().contentType); + paramEntries.getValue().contentType,entry.getKey()); } methodBuilder.addStatement( "paramConfigs.put($S," + mapName +")",entry.getKey()); @@ -214,7 +214,8 @@ private static MethodSpec.Builder generateGetResponseMethodBuilder() { .beginControlFlow("if(responseSet==null)") .beginControlFlow("for (String key : configs.keySet())") .beginControlFlow("if (endpoint.endsWith(key))") - .addStatement("return configs.get(key).responses.get(responseSet.defaultIndex)") + .addStatement("responseSet = configs.get(key)") + .addStatement("return responseSet.responses.get(responseSet.defaultIndex)") .endControlFlow() .endControlFlow() .addStatement("return null") diff --git a/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java b/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java index ea4024f..50915d6 100644 --- a/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java +++ b/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java @@ -120,7 +120,7 @@ okhttp3.Response getResponse(Interceptor.Chain chain, String endpoint) { if (barricadeResponse == null) { return null; } - String fileResponse = getResponseFromFile(endpoint, barricadeResponse.responseFileName); + String fileResponse = getResponseFromFile(barricadeResponse.filePath, barricadeResponse.responseFileName); return new okhttp3.Response.Builder().code(barricadeResponse.statusCode).message("Barricade OK") .request(chain.request()) .protocol(Protocol.HTTP_1_0) @@ -139,9 +139,9 @@ okhttp3.Response getResponse(Interceptor.Chain chain, String endpoint) { okhttp3.Response getResponseForParams(Interceptor.Chain chain, String endpoint,String params) { BarricadeResponse barricadeResponse = barricadeConfig.getResponseForParams(endpoint,params); if (barricadeResponse == null) { - return null; + return getResponse(chain,endpoint); } - String fileResponse = getResponseFromFile(endpoint, barricadeResponse.responseFileName); + String fileResponse = getResponseFromFile(barricadeResponse.filePath, barricadeResponse.responseFileName); return new okhttp3.Response.Builder().code(barricadeResponse.statusCode).message("Barricade OK") .request(chain.request()) .protocol(Protocol.HTTP_1_0) diff --git a/gradle.properties b/gradle.properties index ee99267..769d3cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true GROUP=com.mutualmobile -VERSION_NAME=0.1.9.2-alpha01 +VERSION_NAME=0.1.9.3-alpha01 POM_DESCRIPTION=A network interceptor for OkHttp and Retrofit to return mocked data POM_SITE_URL=https://github.com/mutualmobile/Barricade POM_GIT_URL=scm:git:git://github.com/mutualmobile/Barricade.git From 865dae66182bcf2fc4a562e44712e8d10c1f2412 Mon Sep 17 00:00:00 2001 From: vikramsharma Date: Mon, 27 May 2019 18:11:05 +0530 Subject: [PATCH 07/10] check added to support common endpoint. --- .../com/mutualmobile/barricade/compiler/CodeGenerator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java index de1fa74..70ed2c8 100755 --- a/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java +++ b/barricade-compiler/src/main/java/com/mutualmobile/barricade/compiler/CodeGenerator.java @@ -164,7 +164,7 @@ private static MethodSpec.Builder generateConstructorBuilder( for (Map.Entry entry : values.entrySet()) { BarricadeResponseSet barricadeResponseSet = entry.getValue(); - String listName = "barricadeResponsesFor" + entry.getKey().replaceAll("/","").replaceAll("-",""); + String listName = "barricadeResponsesFor" + entry.getKey().replaceAll("[^a-zA-Z0-9_]+",""); methodBuilder.addStatement("$T<$T> " + listName + " = new $T<>()", List.class, BarricadeResponse.class, ArrayList.class); @@ -181,7 +181,7 @@ private static MethodSpec.Builder generateConstructorBuilder( } for (Map.Entry> entry : paramConfigs.entrySet()) { Map paramResponse = entry.getValue(); - String mapName = "paramValueMapFor" + entry.getKey().replaceAll("/","").replaceAll("-",""); + String mapName = "paramValueMapFor" + entry.getKey().replaceAll("[^a-zA-Z0-9_]+",""); methodBuilder.addStatement("$T<$T,$T> " + mapName + " = new $T<>()", Map.class, String.class, BarricadeResponse.class, HashMap.class); @@ -213,7 +213,7 @@ private static MethodSpec.Builder generateGetResponseMethodBuilder() { .addStatement("$T responseSet = configs.get(endpoint)", BarricadeResponseSet.class) .beginControlFlow("if(responseSet==null)") .beginControlFlow("for (String key : configs.keySet())") - .beginControlFlow("if (endpoint.endsWith(key))") + .beginControlFlow("if ((key.endsWith(\"/*\")&& endpoint.contains(key.substring(0,key.length()-2)))||endpoint.endsWith(key))") .addStatement("responseSet = configs.get(key)") .addStatement("return responseSet.responses.get(responseSet.defaultIndex)") .endControlFlow() From 36616c94c466c3aa7f71c5fd2ca7ecf1f9b83f5e Mon Sep 17 00:00:00 2001 From: vikramsharma Date: Wed, 29 May 2019 15:29:07 +0530 Subject: [PATCH 08/10] Shake listener moved to barricade from builder. ShakeListener enable and disable functionality added. --- .../com/mutualmobile/barricade/Barricade.java | 29 ++-- .../utils/BarricadeShakeListener.java | 142 +++++++++--------- 2 files changed, 88 insertions(+), 83 deletions(-) diff --git a/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java b/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java index 50915d6..ccefb33 100644 --- a/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java +++ b/barricade/src/main/java/com/mutualmobile/barricade/Barricade.java @@ -35,6 +35,7 @@ public class Barricade { private long delay = DEFAULT_DELAY; private boolean enabled = false; + private BarricadeShakeListener barricadeShakeListener; /** * @return The singleton instance of the Barricade @@ -50,14 +51,25 @@ public static Barricade getInstance() { private Barricade() { } - private Barricade(AssetFileManager fileManager, IBarricadeConfig barricadeConfig, long delay, Application application) { + public void enableShakeListener(Application application){ + if (application != null && barricadeShakeListener == null) { + barricadeShakeListener= new BarricadeShakeListener(application); + }else if(barricadeShakeListener!=null){ + barricadeShakeListener.enableShakeListener(); + } + } + + public void disableShakeListener() { + if (barricadeShakeListener != null) { + barricadeShakeListener.disableShakeListener(); + } + } + + + private Barricade(AssetFileManager fileManager, IBarricadeConfig barricadeConfig, long delay) { this.barricadeConfig = barricadeConfig; this.fileManager = fileManager; this.delay = delay; - - if (application != null) { - new BarricadeShakeListener(application); - } } public boolean isEnabled() { @@ -82,11 +94,6 @@ public Builder(IBarricadeConfig barricadeConfig, AssetFileManager fileManager) { this.fileManager = fileManager; } - public Builder enableShakeToStart(Application application) { - this.application = application; - return this; - } - public Builder setGlobalDelay(long delay) { this.delay = delay; return this; @@ -100,7 +107,7 @@ public Builder setGlobalDelay(long delay) { */ public Barricade install() { if (instance == null) { - instance = new Barricade(fileManager, barricadeConfig, delay, application); + instance = new Barricade(fileManager, barricadeConfig, delay); } else { Logger.getLogger(TAG).info("Barricade already installed, install() will be ignored."); } diff --git a/barricade/src/main/java/com/mutualmobile/barricade/utils/BarricadeShakeListener.java b/barricade/src/main/java/com/mutualmobile/barricade/utils/BarricadeShakeListener.java index 6cacce8..6faa375 100644 --- a/barricade/src/main/java/com/mutualmobile/barricade/utils/BarricadeShakeListener.java +++ b/barricade/src/main/java/com/mutualmobile/barricade/utils/BarricadeShakeListener.java @@ -8,102 +8,100 @@ import android.hardware.SensorManager; import android.os.Bundle; import com.mutualmobile.barricade.Barricade; +import com.mutualmobile.barricade.activity.BarricadeActivity; import static android.content.Context.SENSOR_SERVICE; -public class BarricadeShakeListener - implements SensorEventListener, Application.ActivityLifecycleCallbacks { +public class BarricadeShakeListener implements SensorEventListener, Application.ActivityLifecycleCallbacks { - private final Application application; - private static final int SHAKE_THRESHOLD = 1200; - private long lastUpdate = 0; - private float lastX, lastY, lastZ; + private final Application application; + private static final int SHAKE_THRESHOLD = 1200; + private long lastUpdate = 0; + private float lastX, lastY, lastZ; - private int shakeCount = 0; - private int activityCount = 0; - private SensorManager sensorManager; + private int shakeCount = 0; + private boolean listenerRegistered; + private SensorManager sensorManager; - public BarricadeShakeListener(Application application) { - this.application = application; - this.sensorManager = (SensorManager) application.getSystemService(SENSOR_SERVICE); + public BarricadeShakeListener(Application application) { + this.application = application; + this.sensorManager = (SensorManager) application.getSystemService(SENSOR_SERVICE); - application.registerActivityLifecycleCallbacks(this); - } + application.registerActivityLifecycleCallbacks(this); + } - @Override public void onSensorChanged(SensorEvent sensorEvent) { - long curTime = System.currentTimeMillis(); - if ((curTime - lastUpdate) > 100) { - long diffTime = (curTime - lastUpdate); - lastUpdate = curTime; + @Override public void onSensorChanged(SensorEvent sensorEvent) { + long curTime = System.currentTimeMillis(); + if ((curTime - lastUpdate) > 100) { + long diffTime = (curTime - lastUpdate); + lastUpdate = curTime; - float x, y, z; - x = sensorEvent.values[0]; - y = sensorEvent.values[1]; - z = sensorEvent.values[2]; + float x, y, z; + x = sensorEvent.values[0]; + y = sensorEvent.values[1]; + z = sensorEvent.values[2]; - float speed = Math.abs(x + y + z - lastX - lastY - lastZ) / diffTime * 10000; + float speed = Math.abs(x + y + z - lastX - lastY - lastZ) / diffTime * 10000; - if (speed > SHAKE_THRESHOLD) { - shakeCount++; - } else { - shakeCount = 0; - } - if (shakeCount >= 2) { - shakeCount = 0; - Barricade.getInstance().launchConfigActivity(application); - } - lastX = x; - lastY = y; - lastZ = z; - } - } + if (speed > SHAKE_THRESHOLD) { + shakeCount++; + } else { + shakeCount = 0; + } + if (shakeCount >= 2) { + shakeCount = 0; + Barricade.getInstance().launchConfigActivity(application); + } + lastX = x; + lastY = y; + lastZ = z; + } + } - private void enableShakeListener() { - sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), - SensorManager.SENSOR_DELAY_GAME); - } + public void enableShakeListener() { + if (!listenerRegistered) { + listenerRegistered = + sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), + SensorManager.SENSOR_DELAY_GAME); + } + } - private void disableShakeListener() { - sensorManager.unregisterListener(this); - } + public void disableShakeListener() { + sensorManager.unregisterListener(this); + listenerRegistered = false; + } - @Override public void onAccuracyChanged(Sensor sensor, int i) { + @Override public void onAccuracyChanged(Sensor sensor, int i) { - } + } - @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { - } + } - @Override public void onActivityStarted(Activity activity) { - activityCount++; + @Override public void onActivityStarted(Activity activity) { + enableShakeListener(); + } - if (activityCount == 1) { - enableShakeListener(); - } - } + @Override public void onActivityResumed(Activity activity) { + enableShakeListener(); + } - @Override public void onActivityResumed(Activity activity) { + @Override public void onActivityPaused(Activity activity) { - } + } - @Override public void onActivityPaused(Activity activity) { + @Override public void onActivityStopped(Activity activity) { + if (activity.isTaskRoot() && !(activity instanceof BarricadeActivity)) { + disableShakeListener(); + } + } - } + @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { - @Override public void onActivityStopped(Activity activity) { - activityCount--; + } - if (activityCount == 0) { - disableShakeListener(); - } - } + @Override public void onActivityDestroyed(Activity activity) { - @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { - - } - - @Override public void onActivityDestroyed(Activity activity) { - - } + } } From 4952f18e2ad60d5f17c73484cc4847cec6aa8397 Mon Sep 17 00:00:00 2001 From: Kishore Babu Date: Wed, 29 May 2019 15:52:22 +0530 Subject: [PATCH 09/10] Change: Bump up version to 0.2.0-alpha --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 769d3cb..715af1b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true GROUP=com.mutualmobile -VERSION_NAME=0.1.9.3-alpha01 +VERSION_NAME=0.2.0-alpha POM_DESCRIPTION=A network interceptor for OkHttp and Retrofit to return mocked data POM_SITE_URL=https://github.com/mutualmobile/Barricade POM_GIT_URL=scm:git:git://github.com/mutualmobile/Barricade.git From ab3ba9cf9e1aaf9a26bc65190b1451e7e482b857 Mon Sep 17 00:00:00 2001 From: vikramsharma Date: Tue, 20 Aug 2019 18:20:31 +0530 Subject: [PATCH 10/10] minor fixes in sample app. --- .../barricade/sample/BarricadeSampleApplication.java | 3 ++- .../barricade/sample/api/ChuckNorrisApiService.java | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/mutualmobile/barricade/sample/BarricadeSampleApplication.java b/app/src/main/java/com/mutualmobile/barricade/sample/BarricadeSampleApplication.java index 39de2b4..18bac86 100644 --- a/app/src/main/java/com/mutualmobile/barricade/sample/BarricadeSampleApplication.java +++ b/app/src/main/java/com/mutualmobile/barricade/sample/BarricadeSampleApplication.java @@ -7,6 +7,7 @@ public class BarricadeSampleApplication extends Application { @Override public void onCreate() { super.onCreate(); - new Barricade.Builder(this, BarricadeConfig.getInstance()).enableShakeToStart(this).install(); + Barricade barricade =new Barricade.Builder(this, BarricadeConfig.getInstance()).install(); + barricade.enableShakeListener(this); } } diff --git a/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java b/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java index 7ca7076..b21ac95 100644 --- a/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java +++ b/app/src/main/java/com/mutualmobile/barricade/sample/api/ChuckNorrisApiService.java @@ -14,15 +14,15 @@ public interface ChuckNorrisApiService { - @GET("/jokes/random") @Barricade(endpoint = "/jokes/random", responses = { + @GET("/jokes/random") @Barricade(endpoint = "jokes/random", responses = { @Response(fileName = "success.json",isDefault = true), @Response(fileName = "failure.json", statusCode = 401) }) Call getRandomJoke(); - + /*Example of of using barricade with query params*/ @GET("/jokes/random") - @Barricade(endpoint = "/jokes/random", + @Barricade(endpoint = "jokes/random", queryParams = { @QueryParams( params = {@Params(name = "path",value = "success")} , response = @Response(fileName = "success.json",isDefault = true)), @@ -34,8 +34,9 @@ public interface ChuckNorrisApiService { @Response(fileName = "failure.json", statusCode = 401) }) Call getRandomJoke(@Query("path")String test); + /*Using barricade with url path param */ @GET("/jokes/{path}") - @Barricade(endpoint = "/jokes/", + @Barricade(endpoint = "jokes/", path = {@UrlPath(path = "path", responses = { @Response(fileName = "success.json") }) }) Call getRandomJokePath(@Path("path") String test);