Panagiotis Triantafyllou

added back register device request, campaigns and articles implementation, new libs

# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<value>
<entry key="app">
<State />
</entry>
</value>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2025-02-13T08:44:19.612560Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=R58M42EM7YT" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState>
</selectionStates>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="$PROJECT_DIR$/../../../../../../gradle-6.6.1" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/warply_android_sdk" />
</set>
</option>
<option name="resolveExternalAnnotations" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
<option name="TOP_LEVEL_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="INNER_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="METHOD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
</value>
</option>
<option name="FIELD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="IGNORE_DEPRECATED" value="false" />
<option name="IGNORE_JAVADOC_PERIOD" value="true" />
<option name="IGNORE_DUPLICATED_THROWS" value="false" />
<option name="IGNORE_POINT_TO_ITSELF" value="false" />
<option name="myAdditionalJavadocTags" value="guide" />
</inspection_tool>
</profile>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven" />
<option name="name" value="maven" />
<option name="url" value="https://developer.huawei.com/repo/" />
</remote-repository>
<remote-repository>
<option name="id" value="MavenRepo" />
<option name="name" value="MavenRepo" />
<option name="url" value="https://repo.maven.apache.org/maven2/" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven2" />
<option name="name" value="maven2" />
<option name="url" value="https://plugins.gradle.org/m2/" />
</remote-repository>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="..\:/Users/Warply/AppData/Local/Android/Sdk/platforms/android-31/data/res/drawable/btn_dropdown.xml" value="0.2705" />
<entry key="..\:/Users/Warply/AppData/Local/Android/Sdk/platforms/android-31/data/res/layout/simple_spinner_dropdown_item.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/AppData/Local/Android/Sdk/platforms/android-31/data/res/layout/simple_spinner_item.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/app/src/main/res/layout/activity_main.xml" value="0.22418478260869565" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/app/src/main/res/layout/activity_splash.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/app/src/main/res/layout/campaign_grid_item.xml" value="0.18802083333333333" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" value="0.196" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_gradient.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_grey_bg.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_grey_bg2.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_grey_bg3.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_grey_bg4.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_grey_bg_left_radius.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_grey_bg_right_radius.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_light_blue.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_light_grey.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_white.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_white2.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_white3.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_white_bg_right_radius.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/banner_border_white_rounded_top.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/bg_spinner_arrow.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/bottom_border.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/bottom_border_gradient.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/bottom_border_gradient2.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/bottom_border_gradient_grey_bg.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/bottom_border_grey_transparent.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/bottom_border_light_blue.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/bottom_border_transparent.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/button_border_dark_blue.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/button_border_grey.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/divider.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/divider2.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/round_border.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/round_border_green.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/round_border_green2.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/round_border_green2_tr.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/round_border_tr.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/round_border_with_border_radius.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_button_green.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_button_green_border.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_button_grey.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_cos_campaign.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_cos_white.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_menu_explore.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_menu_home.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_menu_loyalty.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_menu_profile.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_menu_shop.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_spinner_arrow.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/selector_tab_title_color.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_campaign_white.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_campaign_white_tr.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_coupon_info.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_gradient.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_gradient2.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_gradient3.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_gradient4.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_gradient5.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_gradient6.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_gradient6_shahow.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_gradient_coupons_bg.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_green.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_green_tr.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_grey.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_grey2.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_grey2_tr.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_grey3.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_grey4.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_grey5.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_grey_shadow.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_loyalty.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_loyalty_no_border.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_loyalty_white.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_mfy_rounded.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_profile.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_profile_gradient.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_profile_image.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_sky_blue.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_transparent.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_transparent_rounded.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_transparent_rounded2.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_transparent_rounded3.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_transparent_top_rounded.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_transparent_upper_circle.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_white.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_white2.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_white_border.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_white_rounded_lower.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_white_rounded_top.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_cos_white_tr.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_dashed.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_dashed_vertical.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_line_gradient.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_market_limit.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_round_border_gradient.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_round_border_gradient2.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/shape_top_left_rounded.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/svg_background_more.xml" value="0.2705" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/svg_background_transparent.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/drawable/svg_background_transparent2.xml" value="0.2965" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/font/warply_font_family.xml" value="0.396875" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/active_coupon_layout.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/active_rewards_layout.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_active_coupons.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_active_gifts.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_active_rewards.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_base_fragment.xml" value="0.25" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_bill_payment.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_contextual.xml" value="0.22" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_coupon_gift.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_coupon_info.xml" value="0.2" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_coupon_share.xml" value="0.22" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_coupons_history.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_couponset_info.xml" value="0.22" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_gifts_for_you.xml" value="0.22" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_list_for_you.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_loyalty.xml" value="0.3226397800183318" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_loyalty_analysis.xml" value="0.33" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_loyalty_market_analysis.xml" value="0.23157894736842105" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_loyalty_wallet.xml" value="0.30782684739833843" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_more_for_you.xml" value="0.22" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_past_coupons.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_shops.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_shops_huawei.xml" value="0.18618618618618618" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_steps.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_telco.xml" value="0.2" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_unified_coupon_info.xml" value="0.23157894736842105" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/activity_webview.xml" value="0.4282238442822384" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/burnt_coupon_layout.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/button_with_image.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/carousel_item.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/cos_analysis.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/cos_piechart.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/cos_piechart2.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/cos_piechart_conditional_render.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/coupon_layout.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/coupon_transaction.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/custom_coupon_layout.xml" value="0.30085470085470084" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/dl_dialog.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/dl_map_pin.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/dl_share.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/dlg_success.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/expired_coupon_layout.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/fragment_home.xml" value="0.22" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/fragment_loyalty.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/fragment_profile.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/gift_layout.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/info_widget.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/item_merged_gifts_recycler.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/item_profile_recycler.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/item_profile_recycler2.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/item_profile_recycler_vertical.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/item_selectable.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/item_share.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/layout_inapp_alert_dialog_default.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/loyalty_analysis_container.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/loyalty_banner.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/loyalty_burnt_coupons.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/loyalty_coupons.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/loyalty_gifts.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/loyalty_redeemed_gifts.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/market_coupon_layout.xml" value="0.23157894736842105" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/past_coupon_layout.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/payment_success_dialog.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/redeemed_gift_layout.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/shape_cos_gradient.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/shared_coupon_layout.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/spinner_dropdown_item.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/spinner_dropdown_item_grey.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/spinner_dropdown_item_sky_blue.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/spinner_item.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/spinner_item_grey.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/tab_analysis.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/tab_analysis_grey_bg.xml" value="0.358695652173913" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/layout/tab_coupon_analysis.xml" value="0.36666666666666664" />
<entry key="..\:/Users/Warply/Documents/Warply/Android/warply_android_sdk_maven_plugin/warply_android_sdk/src/main/res/menu/menu_bottom_nav.xml" value="0.36666666666666664" />
</map>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="zulu-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
......@@ -68,7 +68,7 @@ dependencies {
implementation 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
implementation 'io.reactivex.rxjava3:rxjava:3.1.8'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
implementation 'com.google.android.material:material:1.12.0'
implementation 'com.google.android.material:material:1.13.0'
implementation 'org.greenrobot:eventbus:3.3.1'
implementation 'com.google.guava:guava:33.0.0-android'
......@@ -99,14 +99,14 @@ dependencies {
implementation 'androidx.sqlite:sqlite:2.5.2'
//------------------------------ Retrofit -----------------------------//
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:retrofit:3.0.0'
implementation 'com.squareup.retrofit2:converter-gson:3.0.0'
//------------------------------ Lifecycle -----------------------------//
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
//------------------------------ Retrofit Logs -----------------------------//
// implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
implementation 'com.squareup.okhttp3:logging-interceptor:5.1.0'
}
// In every export please update the version number
......
......@@ -744,7 +744,7 @@ public enum Warply {
return;
}
if (!WarpUtils.isRegisteredWarply(context)) {
registerWarply(context);
registerWarply();
return;
}
if (WarpUtils.getIsDEVICEINFOENABLED(context))
......@@ -1378,7 +1378,7 @@ public enum Warply {
WarplyDBHelper.getInstance(mContext).deleteAllRequests();
WarplyDBHelper.getInstance(mContext).deleteAllPushRequests();
WarplyDBHelper.getInstance(mContext).deleteAllPushAckRequests();
String webId = result.optString("web_id", "");
String webId = result.optString("web_id", "deprecated");
WarpUtils.setWebId(mContext, webId);
String apiKey = result.optString("api_key", "");
WarpUtils.setApiKey(mContext, apiKey);
......
......@@ -10,6 +10,7 @@ import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
......@@ -24,7 +25,7 @@ import ly.warp.sdk.R;
import ly.warp.sdk.io.adapters.BannerAdapter;
import ly.warp.sdk.io.adapters.OfferAdapter;
import ly.warp.sdk.io.callbacks.CallbackReceiver;
import ly.warp.sdk.io.models.Campaign;
import ly.warp.sdk.io.models.BannerItem;
import ly.warp.sdk.io.models.DummyDataProvider;
import ly.warp.sdk.io.models.OfferCategory;
import ly.warp.sdk.io.models.OfferItem;
......@@ -85,6 +86,7 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
private TextView mTvAllOffers, mTvAllFavorites, mTvAllViability, mTvAllFamily,
mTvAllCoffee, mTvAllTravelling, mTvAllKids, mTvAllPurchases;
private ImageView mIvProfile;
private ConstraintLayout mViewPager;
// ===========================================================
// Methods for/from SuperClass/Interfaces
......@@ -143,6 +145,8 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
mPbLoading = findViewById(R.id.pb_loading);
mPbLoading.setOnTouchListener((v, event) -> true);
mViewPager = findViewById(R.id.cl_viewpager);
mIvProfile = findViewById(R.id.profile_icon);
mIvProfile.setOnClickListener(this);
......@@ -421,10 +425,14 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
mBannerViewPager = findViewById(R.id.banner_viewpager);
mDotsContainer = findViewById(R.id.dots_container);
mBannerAdapter = new BannerAdapter(this, WarplyManagerHelper.getCampaignList());
mBannerAdapter.setOnBannerClickListener(campaign -> {
mBannerAdapter = new BannerAdapter(this, WarplyManagerHelper.getBannerList());
mBannerAdapter.setOnBannerCampaignClickListener(campaign -> {
startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCampaignUrl(campaign)));
});
mBannerAdapter.setOnBannerContentClickListener(article -> {
//TODO: click article
String s = "";
});
// Set the number of pages to preload for adjacent items
mBannerViewPager.setOffscreenPageLimit(5);
......@@ -432,7 +440,7 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
mBannerViewPager.setAdapter(mBannerAdapter);
// Setup pagination dots
setupPaginationDots(WarplyManagerHelper.getCampaignList().size());
setupPaginationDots(WarplyManagerHelper.getBannerList().size());
// Handle page changes
mBannerViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
......@@ -486,26 +494,29 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
}
}
private CallbackReceiver<ArrayList<Campaign>> mCampaignsCallback = new CallbackReceiver<ArrayList<Campaign>>() {
private CallbackReceiver<ArrayList<BannerItem>> mCampaignsCallback = new CallbackReceiver<ArrayList<BannerItem>>() {
@Override
public void onSuccess(ArrayList<Campaign> result) {
public void onSuccess(ArrayList<BannerItem> result) {
mPbLoading.setVisibility(View.GONE);
if (result != null && !result.isEmpty()) {
// Preloads the campaigns' images
result.forEach(campaign -> {
result.forEach(bannerItem -> {
Glide.with(getApplicationContext())
.load(campaign.getLogoUrl())
.load(bannerItem.isCampaign() ? bannerItem.getCampaign().getLogoUrl() : bannerItem.getContent().getImgPreview())
.diskCacheStrategy(DiskCacheStrategy.DATA)
.preload();
});
setupBannerCarousel();
} else {
mViewPager.setVisibility(View.GONE);
}
}
@Override
public void onFailure(int errorCode) {
mPbLoading.setVisibility(View.GONE);
mViewPager.setVisibility(View.GONE);
}
};
}
......
......@@ -15,25 +15,36 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
import java.util.ArrayList;
import ly.warp.sdk.R;
import ly.warp.sdk.io.models.BannerItem;
import ly.warp.sdk.io.models.Campaign;
import ly.warp.sdk.io.models.Content;
public class BannerAdapter extends RecyclerView.Adapter<BannerAdapter.BannerViewHolder> {
private final Context mContext;
private final ArrayList<Campaign> mCampaigns;
private OnBannerClickListener mListener;
private final ArrayList<BannerItem> mBannerItems;
private OnBannerCampaignClickListener mListenerCampaign;
private OnBannerContentClickListener mListenerContent;
public interface OnBannerClickListener {
void onBannerClick(Campaign campaign);
public interface OnBannerCampaignClickListener {
void onBannerCampaignClick(Campaign campaign);
}
public BannerAdapter(Context context, ArrayList<Campaign> campaigns) {
public interface OnBannerContentClickListener {
void onBannerContentClick(Content content);
}
public BannerAdapter(Context context, ArrayList<BannerItem> campaigns) {
this.mContext = context;
this.mCampaigns = campaigns;
this.mBannerItems = campaigns;
}
public void setOnBannerClickListener(OnBannerClickListener listener) {
this.mListener = listener;
public void setOnBannerCampaignClickListener(OnBannerCampaignClickListener listener) {
this.mListenerCampaign = listener;
}
public void setOnBannerContentClickListener(OnBannerContentClickListener listener) {
this.mListenerContent = listener;
}
@NonNull
......@@ -45,27 +56,44 @@ public class BannerAdapter extends RecyclerView.Adapter<BannerAdapter.BannerView
@Override
public void onBindViewHolder(@NonNull BannerViewHolder holder, int position) {
Campaign campaignItem = mCampaigns.get(position);
BannerItem bannerItem = mBannerItems.get(position);
Glide.with(mContext)
if (bannerItem.isCampaign()) {
Glide.with(mContext)
// .setDefaultRequestOptions(
// RequestOptions
// .placeholderOf(R.drawable.demo_logo)
// .error(R.drawable.demo_logo))
.load(campaignItem.getLogoUrl())
.diskCacheStrategy(DiskCacheStrategy.DATA)
.into(holder.imageView);
holder.itemView.setOnClickListener(v -> {
if (mListener != null) {
mListener.onBannerClick(campaignItem);
}
});
.load(bannerItem.getCampaign().getLogoUrl())
.diskCacheStrategy(DiskCacheStrategy.DATA)
.into(holder.imageView);
holder.itemView.setOnClickListener(v -> {
if (mListenerCampaign != null) {
mListenerCampaign.onBannerCampaignClick(bannerItem.getCampaign());
}
});
} else {
Glide.with(mContext)
// .setDefaultRequestOptions(
// RequestOptions
// .placeholderOf(R.drawable.demo_logo)
// .error(R.drawable.demo_logo))
.load(bannerItem.getContent().getImgPreview())
.diskCacheStrategy(DiskCacheStrategy.DATA)
.into(holder.imageView);
holder.itemView.setOnClickListener(v -> {
if (mListenerContent != null) {
mListenerContent.onBannerContentClick(bannerItem.getContent());
}
});
}
}
@Override
public int getItemCount() {
return mCampaigns.size();
return mBannerItems.size();
}
static class BannerViewHolder extends RecyclerView.ViewHolder {
......
package ly.warp.sdk.io.models;
public class BannerItem {
public enum ItemType {
CAMPAIGN,
CONTENT
}
private ItemType type;
private Campaign campaign;
private Content content;
private int sorting;
public BannerItem(Campaign campaign) {
this.type = ItemType.CAMPAIGN;
this.campaign = campaign;
this.content = null;
this.sorting = campaign.getSorting();
}
public BannerItem(Content content) {
this.type = ItemType.CONTENT;
this.content = content;
this.campaign = null;
this.sorting = content.getSorting();
}
public ItemType getType() {
return type;
}
public Campaign getCampaign() {
return campaign;
}
public Content getContent() {
return content;
}
public boolean isCampaign() {
return type == ItemType.CAMPAIGN;
}
public boolean isContent() {
return type == ItemType.CONTENT;
}
}
......@@ -72,8 +72,6 @@ public class Campaign implements Parcelable, Serializable {
private static final String ACTIONS = "actions";
private static final String BUS_ID = "busId";
private static final String CAMPAIGN_TYPE_SETTINGS = "campaign_type_settings";
private static final String BANNER_IMAGE = "Banner_img";
private static final String BANNER_TITLE = "Banner_title";
private static final String CATEGORY_ID = "category_id";
private static final String COUPON_AVAILABILITY = "coupon_availability";
......@@ -103,8 +101,6 @@ public class Campaign implements Parcelable, Serializable {
private String busId;
private ArrayList<CampaignAction> actions = new ArrayList<>();
private String campaignTypeSettings;
private String bannerImage;
private String bannerTitle;
private String categoryId;
private Integer couponAvailability;
private String endDate, startDate;
......@@ -148,8 +144,6 @@ public class Campaign implements Parcelable, Serializable {
this.busId = "";
this.actions = new ArrayList<>();
this.campaignTypeSettings = "";
this.bannerImage = "";
this.bannerTitle = "";
this.couponAvailability = null;
this.categoryId = "";
this.endDate = "";
......@@ -186,20 +180,6 @@ public class Campaign implements Parcelable, Serializable {
this.isNew = json.optBoolean(IS_NEW);
this.sorting = json.optInt(SORTING);
this.extraFields = json.optString(EXTRA_FIELDS);
if (!TextUtils.isEmpty(this.extraFields)) {
JSONObject extraFieldsResp = WarpJSONParser.getJSONFromString(this.extraFields);
if (extraFieldsResp != null) {
if (extraFieldsResp.has("Banner_title")) {
this.bannerTitle = extraFieldsResp.optString(BANNER_TITLE, "");
}
if (extraFieldsResp.has("Banner_img")) {
this.bannerImage = extraFieldsResp.optString(BANNER_IMAGE, "");
}
}
} else {
this.bannerImage = "";
this.bannerTitle = "";
}
this.type = json.optString(TYPE);
this.expired = json.optBoolean(EXPIRED);
this.show = json.optBoolean(SHOW);
......@@ -651,22 +631,6 @@ public class Campaign implements Parcelable, Serializable {
this.campaignTypeSettings = campaignTypeSettings;
}
public String getBannerImage() {
return this.bannerImage;
}
public String getBannerTitle() {
return this.bannerTitle;
}
public void setBannerImage(String bannerImage) {
this.bannerImage = bannerImage;
}
public void setBannerTitle(String bannerTitle) {
this.bannerTitle = bannerTitle;
}
public String getEndDate() {
return endDate;
}
......
/*
* Copyright 2010-2013 Warply Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE WARPLY LTD ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL WARPLY LTD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package ly.warp.sdk.io.models;
import android.os.Parcel;
import android.os.Parcelable;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.Serializable;
import java.util.ArrayList;
import ly.warp.sdk.utils.WarpUtils;
import ly.warp.sdk.utils.constants.WarpConstants;
/**
* Created by Panagiotis Triantafyllou on 04-Sept-25.
*/
public class Content implements Parcelable, Serializable {
private static final long serialVersionUID = -4754964462459705285L;
/* Constants used to export the Content in JSON formal and vice versa */
private static final String ID = "id";
private static final String ID_ID = "id_id";
private static final String CUSTOM_ID = "custom_id";
private static final String NAME = "name";
private static final String DESCRIPTION = "description";
private static final String SHORT_DESCRIPTION = "short_description";
private static final String COUPON_DESCRIPTION = "coupon_description";
private static final String ACTIVE = "active";
private static final String CREATED = "created";
private static final String CATEGORY_ID = "category_id";
private static final String CATEGORY_NAME = "category_name";
private static final String CATEGORY_UUID = "category_uuid";
private static final String MERCHANT_UUID = "merchant_uuid";
private static final String TAGS = "tags";
private static final String START_DATE = "start_date";
private static final String END_DATE = "end_date";
private static final String IMG_PREVIEW = "img_preview";
private static final String IMG = "img";
private static final String FAVOURITE = "favourite";
private static final String EXTRA_FIELDS = "extra_fields";
private static final String PARTICIPATED = "participated";
private static final String PARTICIPATED_FIELDS = "participated_fields";
private static final String PARENT = "parent";
private static final String SORTING = "sorting";
private static final String CONSUMER_FULL_NAME = "consumer_full_name";
private static final String CONSUMER_PHOTO = "consumer_photo";
/* Member variables of the Content object */
private String id = "";
private int idid = 0;
private String customId = "";
private String name = "";
private String description = "";
private String shortDescription = "";
private String couponDescription = "";
private boolean active = false;
private String created = "";
private int categoryId = 0;
private String categoryName = "";
private String categoryUuid = "";
private String merchantUuid = "";
private ArrayList<Tags> tags = new ArrayList<Tags>();
private String startDate = "";
private String endDate = "";
private String imgPreview = "";
private ArrayList<String> img = new ArrayList<String>();
private boolean favourite = false;
private JSONObject extraFields = new JSONObject();
private String participated = "";
private JSONObject participatedFields = new JSONObject();
private String parent = "";
private int sorting = 0;
private String consumerFullName = "";
private String consumerPhoto = "";
public Content() {
this.id = "";
this.idid = 0;
this.customId = "";
this.name = "";
this.description = "";
this.shortDescription = "";
this.couponDescription = "";
this.active = false;
this.created = "";
this.categoryId = 0;
this.categoryName = "";
this.categoryUuid = "";
this.merchantUuid = "";
this.tags = new ArrayList<Tags>();
this.startDate = "";
this.endDate = "";
this.imgPreview = "";
this.img = new ArrayList<String>();
this.favourite = false;
this.extraFields = new JSONObject();
this.participated = "";
this.participatedFields = new JSONObject();
this.parent = "";
this.sorting = 0;
this.consumerFullName = "";
this.consumerPhoto = "";
}
/**
* Basic constructor used to create an object from a String, representing a
* JSON Object
*
* @param json The String, representing the JSON Object
* @throws JSONException Thrown if the String cannot be converted to JSON
*/
public Content(String json) throws JSONException {
this(new JSONObject(json));
}
public class Tags {
private static final String NAME = "name";
private static final String ID = "id";
private String name = "";
private String id = "";
public Tags() {
this.name = "";
this.id = "";
}
public Tags(JSONObject json) {
if (json != null) {
this.name = json.isNull(NAME) ? "" : json.optString(NAME);
this.id = json.isNull(ID) ? "" : json.optString(ID);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
/**
* Constructor used to create an Object from a given JSON Object
*
* @param json JSON Object used to create the Content
*/
public Content(JSONObject json) {
if (json != null) {
this.id = json.optString(ID);
this.idid = json.optInt(ID_ID);
this.customId = json.isNull(CUSTOM_ID) ? "" : json.optString(CUSTOM_ID);
this.name = json.optString(NAME);
this.description = json.optString(DESCRIPTION);
this.shortDescription = json.optString(SHORT_DESCRIPTION);
this.couponDescription = json.optString(COUPON_DESCRIPTION);
this.active = json.optBoolean(ACTIVE);
this.created = json.optString(CREATED);
this.categoryId = json.optInt(CATEGORY_ID);
this.categoryName = json.optString(CATEGORY_NAME);
this.categoryUuid = json.optString(CATEGORY_UUID);
this.merchantUuid = json.isNull(MERCHANT_UUID) ? "" : json.optString(MERCHANT_UUID);
JSONArray tempTags = json.optJSONArray(TAGS);
if (tempTags != null) {
for (int i = 0; i < tempTags.length(); i++) {
this.tags.add(new Tags(tempTags.optJSONObject(i)));
}
} else {
this.tags = new ArrayList<Tags>();
}
this.startDate = json.isNull(START_DATE) ? "" : json.optString(START_DATE);
this.endDate = json.isNull(END_DATE) ? "" : json.optString(END_DATE);
this.imgPreview = json.optString(IMG_PREVIEW);
try {
JSONArray tempImg = new JSONArray(json.optString(IMG));
if (tempImg != null) {
for (int i = 0; i < tempImg.length(); i++) {
this.img.add(tempImg.optString(i));
}
}
} catch (JSONException e) {
this.img = new ArrayList<String>();
}
this.favourite = json.optBoolean(FAVOURITE);
this.extraFields = json.optJSONObject(EXTRA_FIELDS);
this.participated = json.isNull(PARTICIPATED) ? "" : json.optString(PARTICIPATED);
this.participatedFields = json.optJSONObject(PARTICIPATED_FIELDS);
this.parent = json.isNull(PARENT) ? "" : json.optString(PARENT);
this.sorting = json.optInt(SORTING);
this.consumerFullName = json.isNull(CONSUMER_FULL_NAME) ? "" : json.optString(CONSUMER_FULL_NAME);
this.consumerPhoto = json.isNull(CONSUMER_PHOTO) ? "" : json.optString(CONSUMER_PHOTO);
}
}
public Content(Parcel source) {
this.id = source.readString();
this.idid = source.readInt();
this.customId = source.readString();
this.name = source.readString();
this.description = source.readString();
this.shortDescription = source.readString();
this.couponDescription = source.readString();
this.active = source.readByte() != 0;
this.created = source.readString();
this.categoryId = source.readInt();
this.categoryName = source.readString();
this.categoryUuid = source.readString();
this.merchantUuid = source.readString();
this.tags = source.readArrayList(null);
this.startDate = source.readString();
this.endDate = source.readString();
this.imgPreview = source.readString();
this.img = source.createStringArrayList();
this.favourite = source.readByte() != 0;
this.extraFields = (JSONObject) source.readSerializable();
this.participated = source.readString();
this.participatedFields = (JSONObject) source.readSerializable();
this.parent = source.readString();
this.sorting = source.readInt();
this.consumerFullName = source.readString();
this.consumerPhoto = source.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.id);
dest.writeInt(this.idid);
dest.writeString(this.customId);
dest.writeString(this.name);
dest.writeString(this.description);
dest.writeString(this.shortDescription);
dest.writeString(this.couponDescription);
dest.writeByte(this.active ? (byte) 1 : (byte) 0);
dest.writeString(this.created);
dest.writeInt(this.categoryId);
dest.writeString(this.categoryName);
dest.writeString(this.categoryUuid);
dest.writeString(this.merchantUuid);
dest.writeList(this.tags);
dest.writeString(this.startDate);
dest.writeString(this.endDate);
dest.writeString(this.imgPreview);
dest.writeStringList(this.img);
dest.writeByte(this.favourite ? (byte) 1 : (byte) 0);
dest.writeSerializable((Serializable) this.extraFields);
dest.writeString(this.participated);
dest.writeSerializable((Serializable) this.participatedFields);
dest.writeString(this.parent);
dest.writeInt(this.sorting);
dest.writeString(this.consumerFullName);
dest.writeString(this.consumerPhoto);
}
/**
* Converts the Content into a JSON Object
*
* @return The JSON Object created from this Content
*/
public JSONObject toJSONObject() {
JSONObject jObj = new JSONObject();
try {
jObj.putOpt(ID, this.id);
jObj.putOpt(ID_ID, this.idid);
} catch (JSONException e) {
if (WarpConstants.DEBUG) {
e.printStackTrace();
}
}
return jObj;
}
/**
* String representation of the Content, as a JSON object
*
* @return A String representation of JSON object
*/
public String toString() {
if (toJSONObject() != null)
return toJSONObject().toString();
return null;
}
/**
* String representation of the Content, as a human readable JSON object
*
* @return A human readable String representation of JSON object
*/
public String toHumanReadableString() {
String humanReadableString = null;
try {
humanReadableString = toJSONObject().toString(2);
} catch (JSONException e) {
WarpUtils.warn("Failed converting Content JSON object to String", e);
}
return humanReadableString;
}
// ================================================================================
// Getters
// ================================================================================
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getIdid() {
return idid;
}
public void setIdid(int idid) {
this.idid = idid;
}
public String getCustomId() {
return customId;
}
public void setCustomId(String customId) {
this.customId = customId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getShortDescription() {
return shortDescription;
}
public void setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
}
public String getCouponDescription() {
return couponDescription;
}
public void setCouponDescription(String couponDescription) {
this.couponDescription = couponDescription;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public String getCreated() {
return created;
}
public void setCreated(String created) {
this.created = created;
}
public int getCategoryId() {
return categoryId;
}
public void setCategoryId(int categoryId) {
this.categoryId = categoryId;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public String getCategoryUuid() {
return categoryUuid;
}
public void setCategoryUuid(String categoryUuid) {
this.categoryUuid = categoryUuid;
}
public String getMerchantUuid() {
return merchantUuid;
}
public void setMerchantUuid(String merchantUuid) {
this.merchantUuid = merchantUuid;
}
public ArrayList<Tags> getTags() {
return tags;
}
public void setTags(ArrayList<Tags> tags) {
this.tags = tags;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public String getImgPreview() {
return imgPreview;
}
public void setImgPreview(String imgPreview) {
this.imgPreview = imgPreview;
}
public ArrayList<String> getImg() {
return img;
}
public void setImg(ArrayList<String> img) {
this.img = img;
}
public boolean isFavourite() {
return favourite;
}
public void setFavourite(boolean favourite) {
this.favourite = favourite;
}
public JSONObject getExtraFields() {
return extraFields;
}
public void setExtraFields(JSONObject extraFields) {
this.extraFields = extraFields;
}
public String getParticipated() {
return participated;
}
public void setParticipated(String participated) {
this.participated = participated;
}
public JSONObject getParticipatedFields() {
return participatedFields;
}
public void setParticipatedFields(JSONObject participatedFields) {
this.participatedFields = participatedFields;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public int getSorting() {
return sorting;
}
public void setSorting(int sorting) {
this.sorting = sorting;
}
public String getConsumerFullName() {
return consumerFullName;
}
public void setConsumerFullName(String consumerFullName) {
this.consumerFullName = consumerFullName;
}
public String getConsumerPhoto() {
return consumerPhoto;
}
public void setConsumerPhoto(String consumerPhoto) {
this.consumerPhoto = consumerPhoto;
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<Content> CREATOR = new Creator<Content>() {
public Content createFromParcel(Parcel source) {
return new Content(source);
}
public Content[] newArray(int size) {
return new Content[size];
}
};
}
......@@ -33,12 +33,12 @@ public interface ApiService {
@Headers("Content-Type: application/json")
@POST("/partners/dei/app_login")
Call<ResponseBody> dehUser(@Body RequestBody request,
@Header(WarpConstants.HEADER_DATE) String timeStamp,
@Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
@Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
@Header(WarpConstants.HEADER_CHANNEL) String channel,
@Header(WarpConstants.HEADER_WEB_ID) String webId,
@Header(WarpConstants.HEADER_SIGNATURE) String signature);
@Header(WarpConstants.HEADER_DATE) String timeStamp,
@Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
@Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
@Header(WarpConstants.HEADER_CHANNEL) String channel,
@Header(WarpConstants.HEADER_WEB_ID) String webId,
@Header(WarpConstants.HEADER_SIGNATURE) String signature);
@Headers("Content-Type: application/json")
@POST("/partners/cosmote/verify")
......@@ -97,14 +97,14 @@ public interface ApiService {
@Headers("Content-Type: application/json")
@POST("/api/mobile/v2/{appUuid}/context/")
Call<ResponseBody> getCampaignsAvailability(@Path("appUuid") String appUuid,
@Body RequestBody request,
@Header(WarpConstants.HEADER_DATE) String timeStamp,
@Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
@Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
@Header(WarpConstants.HEADER_CHANNEL) String channel,
@Header(WarpConstants.HEADER_WEB_ID) String webId,
@Header(WarpConstants.HEADER_SIGNATURE) String signature);
Call<ResponseBody> getArticles(@Path("appUuid") String appUuid,
@Body RequestBody request,
@Header(WarpConstants.HEADER_DATE) String timeStamp,
@Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
@Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
@Header(WarpConstants.HEADER_CHANNEL) String channel,
@Header(WarpConstants.HEADER_WEB_ID) String webId,
@Header(WarpConstants.HEADER_SIGNATURE) String signature);
@Headers("Content-Type: application/json")
@POST("/oauth/{appUuid}/context")
......@@ -118,18 +118,6 @@ public interface ApiService {
@Header(WarpConstants.HEADER_SIGNATURE) String signature,
@Header(WarpConstants.HEADER_AUTHORIZATION) String bearer);
@Headers("Content-Type: application/json")
@POST("/oauth/{appUuid}/context")
Call<ResponseBody> getMarketPassDetails(@Path("appUuid") String appUuid,
@Body RequestBody request,
@Header(WarpConstants.HEADER_DATE) String timeStamp,
@Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
@Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
@Header(WarpConstants.HEADER_CHANNEL) String channel,
@Header(WarpConstants.HEADER_WEB_ID) String webId,
@Header(WarpConstants.HEADER_SIGNATURE) String signature,
@Header(WarpConstants.HEADER_AUTHORIZATION) String bearer);
// ===========================================================
// Getter & Setter
// ===========================================================
......
......@@ -32,6 +32,7 @@ import java.util.ArrayList;
import ly.warp.sdk.Warply;
import ly.warp.sdk.db.WarplyDBHelper;
import ly.warp.sdk.io.models.BannerItem;
import ly.warp.sdk.io.models.Campaign;
import ly.warp.sdk.io.models.CouponList;
import ly.warp.sdk.utils.managers.WarplyManager;
......@@ -52,6 +53,7 @@ public class WarplyManagerHelper {
private static CouponList mCouponRedeemedList = new CouponList();
private static ArrayList<Campaign> mCampaignListAll = new ArrayList<Campaign>();
private static ArrayList<BannerItem> mBannerListAll = new ArrayList<BannerItem>();
// ===========================================================
// Methods for/from SuperClass/Interfaces
......@@ -70,6 +72,15 @@ public class WarplyManagerHelper {
return mCampaignListAll;
}
public static void setBannerList(ArrayList<BannerItem> bannerList) {
mBannerListAll.clear();
mBannerListAll.addAll(bannerList);
}
public static ArrayList<BannerItem> getBannerList() {
return mBannerListAll;
}
public static void setCouponRedeemedList(CouponList couponRedeemedList) {
mCouponRedeemedList.clear();
mCouponRedeemedList.addAll(couponRedeemedList);
......
......@@ -27,7 +27,6 @@ package ly.warp.sdk.utils.managers;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.util.ArrayMap;
......@@ -56,7 +55,9 @@ import java.util.concurrent.Executors;
import ly.warp.sdk.Warply;
import ly.warp.sdk.db.WarplyDBHelper;
import ly.warp.sdk.io.callbacks.CallbackReceiver;
import ly.warp.sdk.io.models.BannerItem;
import ly.warp.sdk.io.models.Campaign;
import ly.warp.sdk.io.models.Content;
import ly.warp.sdk.io.models.Coupon;
import ly.warp.sdk.io.models.CouponList;
import ly.warp.sdk.io.models.NewCampaign;
......@@ -64,7 +65,6 @@ import ly.warp.sdk.io.models.RedeemedSMHistoryModel;
import ly.warp.sdk.io.request.WarplyRefreshTokenRequest;
import ly.warp.sdk.io.volley.ApiClient;
import ly.warp.sdk.io.volley.ApiService;
import ly.warp.sdk.utils.WarpJSONParser;
import ly.warp.sdk.utils.WarpUtils;
import ly.warp.sdk.utils.WarplyDeviceInfoCollector;
import ly.warp.sdk.utils.WarplyManagerHelper;
......@@ -353,25 +353,6 @@ public class WarplyManager {
});
}
private static ArrayList<Campaign> mergeCampaignResults(ArrayList<Campaign> resultCampaigns, ArrayList<Campaign> resultPersonalizedCampaigns) {
ArrayList<Campaign> newCampaignList = new ArrayList<Campaign>();
ArrayList<Campaign> campaignLoyaltyList = new ArrayList<>();
if (resultCampaigns != null && !resultCampaigns.isEmpty())
newCampaignList.addAll(resultCampaigns);
if (resultPersonalizedCampaigns != null && !resultPersonalizedCampaigns.isEmpty())
newCampaignList.addAll(resultPersonalizedCampaigns);
if (newCampaignList != null && !newCampaignList.isEmpty()) {
newCampaignList.sort((obj1, obj2) -> Integer.compare(obj1.getSorting(), obj2.getSorting()));
Set<Campaign> set = new LinkedHashSet<>(newCampaignList);
campaignLoyaltyList.addAll(set);
WarplyManagerHelper.setCampaignList(campaignLoyaltyList);
}
return campaignLoyaltyList;
}
public static void getUserCouponsWithCouponsets(final CallbackReceiver<CouponList> receiver) {
WarpUtils.log("************* WARPLY User Coupons Request ********************");
WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active");
......@@ -404,7 +385,43 @@ public class WarplyManager {
}, executorService);
}
public static void getCampaigns(final CallbackReceiver<ArrayList<Campaign>> receiver) {
private static ArrayList<BannerItem> mergeCampaignResults(ArrayList<Campaign> resultCampaigns, ArrayList<Campaign> resultPersonalizedCampaigns, ArrayList<Content> resultArticles) {
ArrayList<BannerItem> allItems = new ArrayList<>();
ArrayList<Campaign> newCampaignList = new ArrayList<Campaign>();
ArrayList<Campaign> campaignLoyaltyList = new ArrayList<>();
if (resultCampaigns != null && !resultCampaigns.isEmpty())
newCampaignList.addAll(resultCampaigns);
if (resultPersonalizedCampaigns != null && !resultPersonalizedCampaigns.isEmpty())
newCampaignList.addAll(resultPersonalizedCampaigns);
if (newCampaignList != null && !newCampaignList.isEmpty()) {
newCampaignList.stream().filter((item) -> item.getType().equals("contest") || item.getOfferCategory().equals("contest"));
newCampaignList.sort((obj1, obj2) -> Integer.compare(obj1.getSorting(), obj2.getSorting()));
Set<Campaign> set = new LinkedHashSet<>(newCampaignList);
campaignLoyaltyList.addAll(set);
}
if (campaignLoyaltyList != null && !campaignLoyaltyList.isEmpty()) {
// Add campaigns
for (Campaign campaign : campaignLoyaltyList) {
allItems.add(new BannerItem(campaign));
}
}
if (resultArticles != null && !resultArticles.isEmpty()) {
// Add articles
for (Content content : resultArticles) {
allItems.add(new BannerItem(content));
}
}
WarplyManagerHelper.setBannerList(allItems);
return allItems;
}
public static void getCampaigns(final CallbackReceiver<ArrayList<BannerItem>> receiver) {
WarpUtils.log("************* WARPLY Get Campaigns Request ********************");
WarpUtils.log("[WARP Trace] WARPLY Get Campaigns Request is active");
WarpUtils.log("**************************************************");
......@@ -413,19 +430,20 @@ public class WarplyManager {
ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(3));
ListenableFuture<ArrayList<Campaign>> futureCampaigns = getCampaignsRetro(service);
SettableFuture<ArrayList<Campaign>> futurePersonalized = SettableFuture.create();
ListenableFuture<ArrayList<Campaign>> futurePersonalizedCampaigns = getCampaignsPersonalizedRetro(service, 0, futurePersonalized);
ListenableFuture<ArrayList<Campaign>> futurePersonalizedCampaigns = getCampaignsPersonalizedRetro(service, 0);
ListenableFuture<ArrayList<Content>> futureArticles = getArticlesRetro(service, new JSONArray().put("Carousel"));
ListenableFuture<List<Object>> allResultsFuture = Futures.allAsList(futureCampaigns, futurePersonalizedCampaigns);
ListenableFuture<ArrayList<Campaign>> mergedResultFuture = Futures.transformAsync(allResultsFuture, results -> {
ListenableFuture<List<Object>> allResultsFuture = Futures.allAsList(futureCampaigns, futurePersonalizedCampaigns, futureArticles);
ListenableFuture<ArrayList<BannerItem>> mergedResultFuture = Futures.transformAsync(allResultsFuture, results -> {
ArrayList<Campaign> resultCampaigns = (ArrayList<Campaign>) results.get(0);
ArrayList<Campaign> resultPersonalizedCampaigns = (ArrayList<Campaign>) results.get(1);
return executorService.submit(() -> mergeCampaignResults(resultCampaigns, resultPersonalizedCampaigns));
ArrayList<Content> resultArticles = (ArrayList<Content>) results.get(2);
return executorService.submit(() -> mergeCampaignResults(resultCampaigns, resultPersonalizedCampaigns, resultArticles));
}, executorService);
Futures.addCallback(mergedResultFuture, new FutureCallback<ArrayList<Campaign>>() {
Futures.addCallback(mergedResultFuture, new FutureCallback<ArrayList<BannerItem>>() {
@Override
public void onSuccess(ArrayList<Campaign> mergedResult) {
public void onSuccess(ArrayList<BannerItem> mergedResult) {
executorService.shutdownNow();
new Handler(Looper.getMainLooper()).post(() -> receiver.onSuccess(mergedResult));
}
......@@ -476,66 +494,31 @@ public class WarplyManager {
}
if (jCampaignsBody != null) {
ArrayList<NewCampaign> tempCampaigns = new ArrayList<>();
ArrayList<Campaign> mCampaignsList = new ArrayList<>();
final ExecutorService executorCampaigns = Executors.newFixedThreadPool(1);
JSONArray finalCampaignsJBody = jCampaignsBody;
executorCampaigns.submit(() -> {
for (int i = 0; i < finalCampaignsJBody.length(); ++i) {
tempCampaigns.add(new NewCampaign(finalCampaignsJBody.optJSONObject(i)));
}
for (NewCampaign newCamp : tempCampaigns) {
Campaign camp = new Campaign();
camp.setIndexUrl(newCamp.getIndexUrl());
camp.setLogoUrl(newCamp.getLogoUrl());
camp.setMessage(newCamp.getMessage());
camp.setOfferCategory(newCamp.getCommunicationCategory());
camp.setSessionUUID(newCamp.getCommunicationUUID());
camp.setTitle(newCamp.getTitle());
camp.setSubtitle(newCamp.getSubtitle());
camp.setSorting(newCamp.getSorting());
camp.setNew(newCamp.getIsNew());
camp.setType(newCamp.getCampaignType());
camp.setEndDate(newCamp.getEndDate());
camp.setStartDate(newCamp.getStartDate());
camp.setShowExpiration(newCamp.isShowExpiration());
camp.setCouponImg(newCamp.getCouponImg());
camp.setFilter(newCamp.getFilter());
try {
camp.setExtraFields(newCamp.getExtraFields().toString());
if (!TextUtils.isEmpty(newCamp.getExtraFields().toString())) {
JSONObject extraFieldsResp = WarpJSONParser.getJSONFromString(newCamp.getExtraFields().toString());
if (extraFieldsResp != null) {
if (extraFieldsResp.has("Banner_title")) {
camp.setBannerTitle(extraFieldsResp.optString("Banner_title", ""));
}
if (extraFieldsResp.has("Banner_img")) {
camp.setBannerImage(extraFieldsResp.optString("Banner_img", ""));
}
if (extraFieldsResp.has("category_id")) {
camp.setCategoryId(extraFieldsResp.optString("category_id", ""));
}
}
} else {
camp.setBannerImage("");
camp.setBannerTitle("");
camp.setCategoryId("");
}
} catch (NullPointerException e) {
camp.setExtraFields("");
camp.setBannerImage("");
camp.setBannerTitle("");
camp.setCategoryId("");
e.printStackTrace();
}
NewCampaign tempNewCampaign = new NewCampaign(finalCampaignsJBody.optJSONObject(i));
camp.setIndexUrl(tempNewCampaign.getIndexUrl());
camp.setLogoUrl(tempNewCampaign.getLogoUrl());
camp.setMessage(tempNewCampaign.getMessage());
camp.setOfferCategory(tempNewCampaign.getCommunicationCategory());
camp.setSessionUUID(tempNewCampaign.getCommunicationUUID());
camp.setTitle(tempNewCampaign.getTitle());
camp.setSubtitle(tempNewCampaign.getSubtitle());
camp.setSorting(tempNewCampaign.getSorting());
camp.setNew(tempNewCampaign.getIsNew());
camp.setType(tempNewCampaign.getCampaignType());
camp.setEndDate(tempNewCampaign.getEndDate());
camp.setStartDate(tempNewCampaign.getStartDate());
camp.setShowExpiration(tempNewCampaign.isShowExpiration());
camp.setCouponImg(tempNewCampaign.getCouponImg());
camp.setFilter(tempNewCampaign.getFilter());
try {
camp.setCampaignTypeSettings(newCamp.getSettings().toString());
} catch (NullPointerException e) {
camp.setCampaignTypeSettings("");
e.printStackTrace();
}
mCampaignsList.add(camp);
}
......@@ -548,6 +531,8 @@ public class WarplyManager {
// receiver.onFailure(2);
future.set(new ArrayList<Campaign>());
}
} else if (String.valueOf(response.code()).startsWith("5")) {
future.set(new ArrayList<Campaign>());
} else {
// receiver.onFailure(response.code());
// future.set(new ArrayList<Campaign>());
......@@ -566,7 +551,9 @@ public class WarplyManager {
return future;
}
private static /*void*/ ListenableFuture<ArrayList<Campaign>> getCampaignsPersonalizedRetro(ApiService service, int tries/*, final CallbackReceiver<ArrayList<Campaign>> receiver*/, SettableFuture<ArrayList<Campaign>> future) {
private static /*void*/ ListenableFuture<ArrayList<Campaign>> getCampaignsPersonalizedRetro(ApiService service, int tries/*, final CallbackReceiver<ArrayList<Campaign>> receiver*/) {
SettableFuture<ArrayList<Campaign>> future = SettableFuture.create();
String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
String webId = WarpUtils.getWebId(Warply.getWarplyContext());
......@@ -602,66 +589,31 @@ public class WarplyManager {
}
if (jCampaignsBody != null) {
ArrayList<NewCampaign> tempCampaigns = new ArrayList<>();
ArrayList<Campaign> mCampaignsList = new ArrayList<>();
final ExecutorService executorPersonalizedCampaigns = Executors.newFixedThreadPool(1);
JSONArray finalCampaignsJBody = jCampaignsBody;
executorPersonalizedCampaigns.submit(() -> {
for (int i = 0; i < finalCampaignsJBody.length(); ++i) {
tempCampaigns.add(new NewCampaign(finalCampaignsJBody.optJSONObject(i)));
}
for (NewCampaign newCamp : tempCampaigns) {
Campaign camp = new Campaign();
camp.setIndexUrl(newCamp.getIndexUrl());
camp.setLogoUrl(newCamp.getLogoUrl());
camp.setMessage(newCamp.getMessage());
camp.setOfferCategory(newCamp.getCommunicationCategory());
camp.setSessionUUID(newCamp.getCommunicationUUID());
camp.setTitle(newCamp.getTitle());
camp.setSubtitle(newCamp.getSubtitle());
camp.setSorting(newCamp.getSorting());
camp.setNew(newCamp.getIsNew());
camp.setType(newCamp.getCampaignType());
camp.setEndDate(newCamp.getEndDate());
camp.setStartDate(newCamp.getStartDate());
camp.setShowExpiration(newCamp.isShowExpiration());
camp.setCouponImg(newCamp.getCouponImg());
camp.setFilter(newCamp.getFilter());
try {
camp.setExtraFields(newCamp.getExtraFields().toString());
if (!TextUtils.isEmpty(newCamp.getExtraFields().toString())) {
JSONObject extraFieldsResp = WarpJSONParser.getJSONFromString(newCamp.getExtraFields().toString());
if (extraFieldsResp != null) {
if (extraFieldsResp.has("Banner_title")) {
camp.setBannerTitle(extraFieldsResp.optString("Banner_title", ""));
}
if (extraFieldsResp.has("Banner_img")) {
camp.setBannerImage(extraFieldsResp.optString("Banner_img", ""));
}
if (extraFieldsResp.has("category_id")) {
camp.setCategoryId(extraFieldsResp.optString("category_id", ""));
}
}
} else {
camp.setBannerImage("");
camp.setBannerTitle("");
camp.setCategoryId("");
}
} catch (NullPointerException e) {
camp.setExtraFields("");
camp.setBannerImage("");
camp.setBannerTitle("");
camp.setCategoryId("");
e.printStackTrace();
}
NewCampaign tempNewCampaign = new NewCampaign(finalCampaignsJBody.optJSONObject(i));
camp.setIndexUrl(tempNewCampaign.getIndexUrl());
camp.setLogoUrl(tempNewCampaign.getLogoUrl());
camp.setMessage(tempNewCampaign.getMessage());
camp.setOfferCategory(tempNewCampaign.getCommunicationCategory());
camp.setSessionUUID(tempNewCampaign.getCommunicationUUID());
camp.setTitle(tempNewCampaign.getTitle());
camp.setSubtitle(tempNewCampaign.getSubtitle());
camp.setSorting(tempNewCampaign.getSorting());
camp.setNew(tempNewCampaign.getIsNew());
camp.setType(tempNewCampaign.getCampaignType());
camp.setEndDate(tempNewCampaign.getEndDate());
camp.setStartDate(tempNewCampaign.getStartDate());
camp.setShowExpiration(tempNewCampaign.isShowExpiration());
camp.setCouponImg(tempNewCampaign.getCouponImg());
camp.setFilter(tempNewCampaign.getFilter());
try {
camp.setCampaignTypeSettings(newCamp.getSettings().toString());
} catch (NullPointerException e) {
camp.setCampaignTypeSettings("");
e.printStackTrace();
}
mCampaignsList.add(camp);
}
......@@ -680,11 +632,11 @@ public class WarplyManager {
public void onSuccess(JSONObject result) {
int status = result.optInt("status", 2);
if (status == 1)
getCampaignsPersonalizedRetro(service, tries/*, receiver*/, future);
getCampaignsPersonalizedRetro(service, tries/*, receiver*/);
else {
// receiver.onFailure(status);
if (tries < MAX_RETRIES) {
getCampaignsPersonalizedRetro(service, (tries + 1), future);
getCampaignsPersonalizedRetro(service, (tries + 1));
} else {
// future.set(new ArrayList<Campaign>());
future.setException(new Throwable());
......@@ -696,14 +648,14 @@ public class WarplyManager {
public void onFailure(int errorCode) {
// receiver.onFailure(errorCode);
if (tries < MAX_RETRIES) {
getCampaignsPersonalizedRetro(service, (tries + 1), future);
getCampaignsPersonalizedRetro(service, (tries + 1));
} else {
// future.set(new ArrayList<Campaign>());
future.setException(new Throwable());
}
}
});
} else if (response.code() == 502) {
} else if (String.valueOf(response.code()).startsWith("5")) {
// receiver.onFailure(response.code());
// future.set(new ArrayList<Campaign>());
future.set(new ArrayList<Campaign>());
......@@ -725,180 +677,89 @@ public class WarplyManager {
return future;
}
private static ListenableFuture<JSONObject> getCampaignAvailability(ApiService service) {
SettableFuture<JSONObject> future = SettableFuture.create();
private static /*void*/ ListenableFuture<ArrayList<Content>> getArticlesRetro(ApiService service, JSONArray categories/*, final CallbackReceiver<ArrayList<Campaign>> receiver*/) {
SettableFuture<ArrayList<Content>> future = SettableFuture.create();
String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
String webId = WarpUtils.getWebId(Warply.getWarplyContext());
Map<String, Object> jsonParamsCampaignsAvailability = new ArrayMap<>();
Map<String, Object> jsonParamsArticles = new ArrayMap<>();
Map<String, Object> jsonParams = new ArrayMap<>();
jsonParams.put("action", "availability");
Map<String, Object> jsonParamsFilters = new ArrayMap<>();
jsonParamsFilters.put("uuids", null);
jsonParamsFilters.put("availability_enabled", true);
jsonParams.put("filters", jsonParamsFilters);
jsonParamsCampaignsAvailability.put("coupon", jsonParams);
RequestBody campaignsAvailabilityRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsCampaignsAvailability)).toString());
Call<ResponseBody> campaignsAvailabilityCall = service.getCampaignsAvailability(WarplyProperty.getAppUuid(Warply.getWarplyContext()), campaignsAvailabilityRequest, timeStamp, "android:" + Warply.getWarplyContext().getPackageName(), new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(), "mobile", webId, WarpUtils.produceSignature(apiKey + timeStamp));
campaignsAvailabilityCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
if (response.code() == 200 && response.body() != null) {
JSONObject jobjCampaignsAvailabilityResponse = null;
try {
jobjCampaignsAvailabilityResponse = new JSONObject(response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
if (jobjCampaignsAvailabilityResponse != null && jobjCampaignsAvailabilityResponse.has("status") && jobjCampaignsAvailabilityResponse.optString("status", "2").equals("1")) {
final ExecutorService executorCampaignsAvailability = Executors.newFixedThreadPool(1);
final JSONObject finalJobjCampaignsAvailabilityResponse = jobjCampaignsAvailabilityResponse;
executorCampaignsAvailability.submit(() -> {
JSONObject jCampaignsAvailabilityBody = null;
try {
jCampaignsAvailabilityBody = finalJobjCampaignsAvailabilityResponse.optJSONObject("context").optJSONObject("MAPP_COUPON").optJSONObject("availability");
} catch (Exception e) {
e.printStackTrace();
}
if (jCampaignsAvailabilityBody != null) {
executorCampaignsAvailability.shutdownNow();
future.set(jCampaignsAvailabilityBody);
}
});
} else {
future.set(new JSONObject());
}
} else {
// future.set(new JSONObject());
future.setException(new Throwable());
}
}
@Override
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
// future.set(new JSONObject());
future.setException(new Throwable());
}
});
return future;
}
private static ListenableFuture<RedeemedSMHistoryModel> getSMCouponsUniversalRetro(ApiService service, int tries, SettableFuture<RedeemedSMHistoryModel> future) {
String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
String webId = WarpUtils.getWebId(Warply.getWarplyContext());
Map<String, Object> jsonParamsCoupons = new ArrayMap<>();
Map<String, Object> jsonParams = new ArrayMap<>();
jsonParams.put("action", "user_coupons");
JSONArray jArr = new JSONArray();
jArr.put("merchant");
jArr.put("redemption");
jsonParams.put("details", jArr);
jsonParams.put("action", "retrieve_multilingual");
if (categories != null && categories.length() > 0)
jsonParams.put("category", categories);
jsonParams.put("language", WarpUtils.getApplicationLocale(Warply.getWarplyContext()));
jsonParams.put("couponset_types", new JSONArray().put("supermarket"));
jsonParamsCoupons.put("coupon", jsonParams);
RequestBody couponsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsCoupons)).toString());
jsonParamsArticles.put("content", jsonParams);
RequestBody articlesRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsArticles)).toString());
Call<ResponseBody> couponsCall = service.getUserCoupons(WarplyProperty.getAppUuid(Warply.getWarplyContext()), couponsRequest, timeStamp, "android:" + Warply.getWarplyContext().getPackageName(), new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(), "mobile", webId, WarpUtils.produceSignature(apiKey + timeStamp), "Bearer " + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("access_token"));
Call<ResponseBody> articlesCall = service.getArticles(
WarplyProperty.getAppUuid(Warply.getWarplyContext()),
articlesRequest,
timeStamp,
"android:" + Warply.getWarplyContext().getPackageName(),
new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(),
"mobile",
webId,
WarpUtils.produceSignature(apiKey + timeStamp)
);
couponsCall.enqueue(new Callback<ResponseBody>() {
articlesCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
if (response.code() == 200 && response.body() != null) {
JSONObject jobjCouponsResponse = null;
JSONObject jobjArticlesResponse = null;
try {
jobjCouponsResponse = new JSONObject(response.body().string());
jobjArticlesResponse = new JSONObject(response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
if (jobjCouponsResponse != null && jobjCouponsResponse.has("status") && jobjCouponsResponse.optString("status", "2").equals("1")) {
JSONArray jCouponsBody = null;
if (jobjArticlesResponse != null && jobjArticlesResponse.has("status") && jobjArticlesResponse.optString("status", "2").equals("1")) {
JSONArray jArticlesBody = null;
try {
jCouponsBody = jobjCouponsResponse.optJSONArray("result");
jArticlesBody = jobjArticlesResponse.optJSONObject("context").optJSONArray("CONTENT");
} catch (Exception e) {
e.printStackTrace();
}
if (jCouponsBody != null) {
RedeemedSMHistoryModel redeemedSMHistoryModel = new RedeemedSMHistoryModel();
CouponList mCouponRedeemedList = new CouponList();
final ExecutorService executorCoupons = Executors.newFixedThreadPool(1);
JSONArray finalJCouponsBody = jCouponsBody;
executorCoupons.submit(() -> {
float couponValue = 0.0f;
if (jArticlesBody != null) {
ArrayList<Content> mArticlesList = new ArrayList<>();
for (int i = 0; i < finalJCouponsBody.length(); ++i) {
Coupon tempCoupon = new Coupon(finalJCouponsBody.optJSONObject(i), true);
if (tempCoupon.getStatus() == 0) {
mCouponRedeemedList.add(tempCoupon);
couponValue += (float) tempCoupon.getCouponsetDetails().getFinal_price();
}
final ExecutorService executorArticles = Executors.newFixedThreadPool(1);
JSONArray finalArticlesJBody = jArticlesBody;
executorArticles.submit(() -> {
for (int i = 0; i < finalArticlesJBody.length(); ++i) {
mArticlesList.add(new Content(finalArticlesJBody.optJSONObject(i)));
}
Collections.sort(mCouponRedeemedList, (coupon1, coupon2) -> coupon1.getRedeemDate().compareTo(coupon2.getRedeemDate()));
redeemedSMHistoryModel.setTotalRedeemedValue(couponValue);
redeemedSMHistoryModel.setRedeemedCouponList(mCouponRedeemedList);
executorCoupons.shutdownNow();
future.set(redeemedSMHistoryModel);
executorArticles.shutdownNow();
// receiver.onSuccess(mCampaignsList);
future.set(mArticlesList);
});
} else {
future.set(new RedeemedSMHistoryModel());
}
} else {
future.set(new RedeemedSMHistoryModel());
// receiver.onFailure(2);
future.set(new ArrayList<Content>());
}
} else if (response.code() == 401) {
refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
@Override
public void onSuccess(JSONObject result) {
int status = result.optInt("status", 2);
if (status == 1)
getSMCouponsUniversalRetro(service, tries/*, receiver*/, future);
else {
// receiver.onFailure(status);
if (tries < MAX_RETRIES) {
getSMCouponsUniversalRetro(service, (tries + 1), future);
} else {
// future.set(new CouponList());
future.setException(new Throwable());
}
}
}
@Override
public void onFailure(int errorCode) {
// receiver.onFailure(errorCode);
if (tries < MAX_RETRIES) {
getSMCouponsUniversalRetro(service, (tries + 1), future);
} else {
// future.set(new CouponList());
future.setException(new Throwable());
}
}
});
} else if (String.valueOf(response.code()).startsWith("5")) {
future.set(new ArrayList<Content>());
} else {
// future.set(new CouponList());
// receiver.onFailure(response.code());
// future.set(new ArrayList<Campaign>());
future.setException(new Throwable());
}
}
@Override
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
// future.set(new CouponList());
// receiver.onFailure(2);
// future.set(new ArrayList<Campaign>());
future.setException(new Throwable());
}
});
return future;
}
......
......@@ -55,6 +55,7 @@
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content">
......