From f63b1622449c60587bd97b13038a40e00d9b38e2 Mon Sep 17 00:00:00 2001 From: Desiree Creel Date: Thu, 22 Jun 2017 17:20:01 -0700 Subject: [PATCH] Fire App Builder v1.0.5 --- AMZNMediaPlayerComponent/build.gradle | 1 - .../amazon/mediaplayer/glue/AMZNPlayer.java | 15 +- .../auth/AdobepassAuthentication.java | 43 +- .../main/java/com/amazon/ads/AdMetaData.java | 132 ++ .../src/main/java/com/amazon/ads/IAds.java | 55 +- .../com/amazon/analytics/AnalyticsTags.java | 124 +- .../amazon/analytics/CustomAnalyticsTags.java | 4 +- .../analytics/ExtraContentAttributes.java | 4 +- Application/app/build.gradle | 4 +- Application/app/src/main/AndroidManifest.xml | 3 +- .../app/src/main/assets/Navigator.json | 3 +- Application/settings.gradle | 4 + ComScoreAnalyticsComponent/build.gradle | 54 + .../libs/comscore/build.gradle | 2 + .../libs/comscore/comscore.aar | Bin 0 -> 857444 bytes ComScoreAnalyticsComponent/proguard-rules.pro | 19 + .../src/main/AndroidManifest.xml | 30 + .../ComScoreCustomAnalyticsTags.json | 15 + .../configurations/ComScoreEventTags.json | 33 + .../analytics/comscore/ComScoreAnalytics.java | 499 +++++ .../ComScoreAnalyticsImplCreator.java | 36 + .../src/main/res/values/custom.xml | 33 + .../src/main/res/values/values.xml | 24 + .../EmptyAndroidApp/settings.gradle | 8 + ComponentTestFramework/config.json | 12 + .../contentbrowser/ContentBrowser.java | 96 +- .../helper/AnalyticsHelper.java | 148 +- .../contentbrowser/helper/AuthHelper.java | 161 +- .../amazon/dynamicparser/impl/XmlParser.java | 11 +- .../auth/facebook/FacebookAuthentication.java | 48 +- .../ads/android/freewheel/FreeWheelAds.java | 63 +- .../GoogleCustomDimensionTags.json | 7 +- .../GoogleCustomMetricTags.json | 13 +- .../LoginWithAmazonAuthentication.java | 26 +- .../ads/passthrough/PassThroughAds.java | 9 + .../uamp/textrenderer/CaptionStyleCompat.java | 183 -- .../android/uamp/textrenderer/CuePainter.java | 394 ---- .../uamp/textrenderer/SubtitleLayout.java | 269 --- .../android/uamp/ui/PlaybackActivity.java | 296 +-- .../uamp/ui/PlaybackOverlayFragment.java | 13 +- UAMP/build.gradle | 2 + .../libs/exoplayer.jar | Bin .../src/main/res/layout/playback_controls.xml | 2 +- .../assets/LoadArrayMappingTest1.json | 9 + .../com/amazon/android/utils/HelpersTest.java | 77 - .../amazon/android/utils/MapHelperTest.java | 196 ++ .../android/utils/NetworkUtilsTest.java | 5 + .../amazon/utils/DateAndTimeHelperTest.java | 42 + Utils/src/androidTest/res/values/strings.xml | 1 + .../android/navigator/NavigatorModel.java | 5 + .../com/amazon/android/utils/Helpers.java | 38 - .../com/amazon/android/utils/MapHelper.java | 115 ++ .../amazon/android/utils/NetworkUtils.java | 65 +- .../com/amazon/utils/DateAndTimeHelper.java | 48 +- .../main/java/com/amazon/utils/ListUtils.java | 21 + .../java/com/amazon/utils/ListUtilsTest.java | 70 + VastAdsComponent/build.gradle | 12 +- .../ads/vast/model/vmap/AdBreakTest.java | 56 + .../vast/processor/AdTagProcessorTest.java | 745 ++++++++ .../src/androidTest/res/values/values.xml | 53 + .../android/ads/vast/VASTAdsPlayer.java | 569 ++++-- .../ads/vast/model/TRACKING_EVENTS_TYPE.java | 65 - .../android/ads/vast/model/Tracking.java | 78 - .../android/ads/vast/model/VASTMediaFile.java | 172 -- .../android/ads/vast/model/VASTModel.java | 401 ---- .../ads/vast/model/VAST_DOC_ELEMENTS.java | 67 - .../android/ads/vast/model/VideoClicks.java | 102 -- .../ads/vast/model/vast/Companion.java | 185 ++ .../ads/vast/model/vast/CompanionAd.java | 83 + .../android/ads/vast/model/vast/Creative.java | 157 ++ .../android/ads/vast/model/vast/Inline.java | 211 +++ .../android/ads/vast/model/vast/LinearAd.java | 115 ++ .../ads/vast/model/vast/MediaFile.java | 361 ++++ .../android/ads/vast/model/vast/VastAd.java | 115 ++ .../ads/vast/model/vast/VastResponse.java | 349 ++++ .../android/ads/vast/model/vmap/AdBreak.java | 444 +++++ .../android/ads/vast/model/vmap/AdSource.java | 293 +++ .../android/ads/vast/model/vmap/AdTagURI.java | 107 ++ .../ads/vast/model/vmap/CustomAdData.java | 108 ++ .../ads/vast/model/vmap/Extension.java | 118 ++ .../android/ads/vast/model/vmap/Tracking.java | 239 +++ .../ads/vast/model/vmap/VmapHelper.java | 132 ++ .../ads/vast/model/vmap/VmapResponse.java | 224 +++ .../ads/vast/processor/AdTagProcessor.java | 141 ++ ...{VASTMediaPicker.java => MediaPicker.java} | 6 +- .../ads/vast/processor/ResponseValidator.java | 140 ++ .../processor/VASTModelPostValidator.java | 126 -- .../ads/vast/processor/VASTProcessor.java | 256 --- .../ads/vast/processor/assets/vast3_draft.xsd | 1036 +++++++++++ .../processor/assets/vast_2_0_1_schema.xsd | 1629 ++++++++++------- .../ads/vast/processor/assets/vmap_schema.xsd | 184 ++ .../ads/vast/util/DefaultMediaPicker.java | 69 +- .../android/ads/vast/util/HttpTools.java | 72 +- .../android/ads/vast/util/NetworkTools.java | 22 +- .../amazon/android/ads/vast/util/VASTLog.java | 131 -- .../android/ads/vast/util/VastAdListener.java | 53 + .../android/ads/vast/util/XmlTools.java | 207 --- .../android/ads/vast/util/XmlValidation.java | 81 - .../src/main/res/values-en-rUS/strings.xml | 17 +- .../src/main/res/values/values.xml | 3 +- 100 files changed, 9494 insertions(+), 3830 deletions(-) create mode 100644 AdsInterface/src/main/java/com/amazon/ads/AdMetaData.java create mode 100644 ComScoreAnalyticsComponent/build.gradle create mode 100644 ComScoreAnalyticsComponent/libs/comscore/build.gradle create mode 100644 ComScoreAnalyticsComponent/libs/comscore/comscore.aar create mode 100644 ComScoreAnalyticsComponent/proguard-rules.pro create mode 100644 ComScoreAnalyticsComponent/src/main/AndroidManifest.xml create mode 100644 ComScoreAnalyticsComponent/src/main/assets/configurations/ComScoreCustomAnalyticsTags.json create mode 100644 ComScoreAnalyticsComponent/src/main/assets/configurations/ComScoreEventTags.json create mode 100644 ComScoreAnalyticsComponent/src/main/java/com/amazon/analytics/comscore/ComScoreAnalytics.java create mode 100644 ComScoreAnalyticsComponent/src/main/java/com/amazon/analytics/comscore/ComScoreAnalyticsImplCreator.java create mode 100644 ComScoreAnalyticsComponent/src/main/res/values/custom.xml create mode 100644 ComScoreAnalyticsComponent/src/main/res/values/values.xml delete mode 100644 TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/CaptionStyleCompat.java delete mode 100644 TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/CuePainter.java delete mode 100644 TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/SubtitleLayout.java rename {AMZNMediaPlayerComponent => UAMP}/libs/exoplayer.jar (100%) create mode 100644 Utils/src/androidTest/assets/LoadArrayMappingTest1.json delete mode 100644 Utils/src/androidTest/java/com/amazon/android/utils/HelpersTest.java create mode 100644 Utils/src/androidTest/java/com/amazon/android/utils/MapHelperTest.java create mode 100644 Utils/src/androidTest/java/com/amazon/utils/DateAndTimeHelperTest.java create mode 100644 Utils/src/main/java/com/amazon/android/utils/MapHelper.java create mode 100644 Utils/src/test/java/com/amazon/utils/ListUtilsTest.java create mode 100644 VastAdsComponent/src/androidTest/java/com/amazon/android/ads/vast/model/vmap/AdBreakTest.java create mode 100644 VastAdsComponent/src/androidTest/java/com/amazon/android/ads/vast/processor/AdTagProcessorTest.java create mode 100644 VastAdsComponent/src/androidTest/res/values/values.xml delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/TRACKING_EVENTS_TYPE.java delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/Tracking.java delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VASTMediaFile.java delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VASTModel.java delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VAST_DOC_ELEMENTS.java delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VideoClicks.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Companion.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/CompanionAd.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Creative.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Inline.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/LinearAd.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/MediaFile.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/VastAd.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/VastResponse.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdBreak.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdSource.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdTagURI.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/CustomAdData.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/Extension.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/Tracking.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/VmapHelper.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/VmapResponse.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/AdTagProcessor.java rename VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/{VASTMediaPicker.java => MediaPicker.java} (94%) create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/ResponseValidator.java delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTModelPostValidator.java delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTProcessor.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vast3_draft.xsd create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vmap_schema.xsd delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/VASTLog.java create mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/VastAdListener.java delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/XmlTools.java delete mode 100644 VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/XmlValidation.java mode change 120000 => 100644 VastAdsComponent/src/main/res/values-en-rUS/strings.xml diff --git a/AMZNMediaPlayerComponent/build.gradle b/AMZNMediaPlayerComponent/build.gradle index d3655cc..33dbc31 100644 --- a/AMZNMediaPlayerComponent/build.gradle +++ b/AMZNMediaPlayerComponent/build.gradle @@ -50,7 +50,6 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.1.1' compile files('libs/AMZNMediaPlayer.jar') - compile files('libs/exoplayer.jar') compile project(':ModuleInterface') compile project(':UAMP') diff --git a/AMZNMediaPlayerComponent/src/main/java/com/amazon/mediaplayer/glue/AMZNPlayer.java b/AMZNMediaPlayerComponent/src/main/java/com/amazon/mediaplayer/glue/AMZNPlayer.java index 7173782..bfb27a6 100644 --- a/AMZNMediaPlayerComponent/src/main/java/com/amazon/mediaplayer/glue/AMZNPlayer.java +++ b/AMZNMediaPlayerComponent/src/main/java/com/amazon/mediaplayer/glue/AMZNPlayer.java @@ -379,38 +379,39 @@ public void enableTextTrack(TrackType trackType, boolean b) { } /* - * TODO: Not implemented yet DEVTECH-2280 + * {@inheritDoc} */ @Override public int getTrackCount(TrackType trackType) { - return 0; + return mPlayer.getTrackCount(trackType); } /* - * TODO: Not implemented yet DEVTECH-2280 + * {@inheritDoc} */ @Override public MediaFormat getTrackFormat(TrackType trackType, int i) { - return null; + return mPlayer.getTrackFormat(trackType, i); } /* - * TODO: Not implemented yet DEVTECH-2280 + * {@inheritDoc} */ @Override public void setSelectedTrack(TrackType trackType, int i) { + mPlayer.setSelectedTrack(trackType, i); } /* - * TODO: Not implemented yet DEVTECH-2280 + * {@inheritDoc} */ @Override public int getSelectedTrack(TrackType trackType) { - return 0; + return mPlayer.getSelectedTrack(trackType); } /* diff --git a/AdobepassAuthComponent/src/main/java/com/amazon/adobepass/auth/AdobepassAuthentication.java b/AdobepassAuthComponent/src/main/java/com/amazon/adobepass/auth/AdobepassAuthentication.java index a6147ac..7e88abc 100644 --- a/AdobepassAuthComponent/src/main/java/com/amazon/adobepass/auth/AdobepassAuthentication.java +++ b/AdobepassAuthComponent/src/main/java/com/amazon/adobepass/auth/AdobepassAuthentication.java @@ -126,8 +126,7 @@ public void onFailure(int statusCode, Header[] headers, String }); } else { - bundle.putString(AuthenticationConstants.ERROR_CATEGORY, - AuthenticationConstants.NETWORK_ERROR_CATEGORY); + populateErrorBundle(bundle, AuthenticationConstants.NETWORK_ERROR_CATEGORY); responseHandler.onFailure(bundle); } } @@ -201,8 +200,7 @@ public void onFailure(int statusCode, Header[] headers, String }); } else { - bundle.putString(AuthenticationConstants.ERROR_CATEGORY, - AuthenticationConstants.NETWORK_ERROR_CATEGORY); + populateErrorBundle(bundle, AuthenticationConstants.NETWORK_ERROR_CATEGORY); responseHandler.onFailure(bundle); } @@ -267,8 +265,7 @@ public void onFailure(int statusCode, Header[] headers, String }); } else { - bundle.putString(AuthenticationConstants.ERROR_CATEGORY, - AuthenticationConstants.NETWORK_ERROR_CATEGORY); + populateErrorBundle(bundle, AuthenticationConstants.NETWORK_ERROR_CATEGORY); responseHandler.onFailure(bundle); } } @@ -292,12 +289,15 @@ public void onFailure(int statusCode, Header[] headers, String private void populateAuthorizationFailureBundle(int statusCode, Bundle bundle, Throwable throwable) { - bundle.putInt(ResponseHandler.STATUS_CODE, statusCode); - bundle.putString( + Bundle errorBundle = new Bundle(); + errorBundle.putInt(ResponseHandler.STATUS_CODE, statusCode); + errorBundle.putString( AuthenticationConstants.ERROR_CATEGORY, AuthenticationConstants.AUTHORIZATION_ERROR_CATEGORY); - bundle.putSerializable( + errorBundle.putSerializable( AuthenticationConstants.ERROR_CAUSE, throwable); + bundle.putBundle( + AuthenticationConstants.ERROR_BUNDLE, errorBundle); } /** @@ -318,11 +318,30 @@ public void cancelAllRequests() { private void populateAuthenticationFailureBundle(int statusCode, Bundle bundle, Throwable throwable) { - bundle.putInt(ResponseHandler.STATUS_CODE, statusCode); - bundle.putString( + Bundle errorBundle = new Bundle(); + errorBundle.putInt(ResponseHandler.STATUS_CODE, statusCode); + errorBundle.putString( AuthenticationConstants.ERROR_CATEGORY, AuthenticationConstants.AUTHENTICATION_ERROR_CATEGORY); - bundle.putSerializable( + errorBundle.putSerializable( AuthenticationConstants.ERROR_CAUSE, throwable); + bundle.putBundle( + AuthenticationConstants.ERROR_BUNDLE, errorBundle); + } + + /** + * Bundle to be sent on failures other than Authentication and Authorization + * + * @param bundle Bundle to populate + * @param errorCategory Error Category + */ + private void populateErrorBundle(Bundle bundle, String errorCategory) { + + Bundle errorBundle = new Bundle(); + errorBundle.putString( + AuthenticationConstants.ERROR_CATEGORY, + errorCategory); + bundle.putBundle( + AuthenticationConstants.ERROR_BUNDLE, errorBundle); } } diff --git a/AdsInterface/src/main/java/com/amazon/ads/AdMetaData.java b/AdsInterface/src/main/java/com/amazon/ads/AdMetaData.java new file mode 100644 index 0000000..60ca0ca --- /dev/null +++ b/AdsInterface/src/main/java/com/amazon/ads/AdMetaData.java @@ -0,0 +1,132 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.ads; + +/** + * Class to hold Ad metadata. + */ +public class AdMetaData { + + /** + * Ad ID. + */ + private String adId = ""; + + /** + * Duration of ad played on screen. + */ + private long durationPlayed; + + /** + * Duration of ad received in ad meta data. + */ + private long durationReceived; + + /** + * Ad Type: Pre roll, Mid roll, Post roll + */ + private String adType = ""; + + /** + * set id of current ad. + * + * @param adId current ad id received in ad metadata. + */ + public void setAdId(String adId) { + + this.adId = adId; + } + + /** + * set duration of current ad played on screen. + * + * @param durationPlayed duration of ad played on screen + */ + public void setDurationPlayed(long durationPlayed) { + + this.durationPlayed = durationPlayed; + } + + /** + * set duration of ad received in ad meta data. + * + * @param durationReceived duration of ad received in ad meta data + */ + public void setDurationReceived(long durationReceived) { + + this.durationReceived = durationReceived; + } + + /** + * set ad type in ad meta data. + * + * @param adType pre, mid or post roll + */ + public void setAdType(String adType) { + + this.adType = adType; + } + + /** + * Return the ad Id. + * + * @return id of current ad. + */ + public String getAdId() { + + return adId; + } + + /** + * Return the duration played of current ad. + * + * @return duration of ad played on screen. + */ + public long getDurationPlayed() { + + return durationPlayed; + } + + /** + * Return the duration received from ad module. + * + * @return duration of ad as received from ad meta data. + */ + public long getDurationReceived() { + + return durationReceived; + } + + /** + * Return the ad type. + * + * @return type of current ad. + */ + public String getAdType() { + + return adType; + } + + @Override + public String toString() { + + return "AdMetaData{" + + "adId='" + adId + '\'' + + ", durationPlayed=" + durationPlayed + + ", durationReceived=" + durationReceived + + ", adType='" + adType + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/AdsInterface/src/main/java/com/amazon/ads/IAds.java b/AdsInterface/src/main/java/com/amazon/ads/IAds.java index ec14274..bf5fa7a 100644 --- a/AdsInterface/src/main/java/com/amazon/ads/IAds.java +++ b/AdsInterface/src/main/java/com/amazon/ads/IAds.java @@ -24,14 +24,50 @@ public interface IAds { /** - * Constant for duration field. + * Constant for Ad Id. */ - String DURATION = "duration"; + String ID = "id"; /** - * Constant for wasAMidRoll field. + * Constant for duration received from ad metadata. */ - String WAS_A_MID_ROLL = "wasAMidRoll"; + String DURATION_RECEIVED = "durationReceived"; + + /** + * Constant for duration calculated during ad play. + */ + String DURATION_PLAYED = "durationPlayed"; + + /** + * Constant for getting the ad pod complete boolean out of the extras bundle. + */ + String AD_POD_COMPLETE = "adPodComplete"; + + /** + * Constant for getting the ad type out of the extras bundle. + */ + String AD_TYPE = "ad_type"; + + /** + * Constant for a pre-roll ad. + */ + String PRE_ROLL_AD = "preroll"; + + /** + * Constant for a mid-roll ad. + */ + String MID_ROLL_AD = "midroll"; + + /** + * Constant for a post-roll ad. + */ + String POST_ROLL_AD = "postroll"; + + /** + * Parameter to add to an ad tag URL with a timestamp so the add will play consecutively if + * called upon. + */ + String CORRELATOR_PARAMETER = "correlator"; /** * Major version number. @@ -46,8 +82,8 @@ public interface IAds { /** * Init Ads instance. * - * @param context Context which Ads consumed in. - * @param frameLayout Layout for Ads. + * @param context The context. + * @param frameLayout Layout for the Ads player. * @param extras Extra bundle to pass through data. */ void init(Context context, FrameLayout frameLayout, Bundle extras); @@ -91,6 +127,13 @@ interface IAdsEvents { */ void setCurrentVideoPosition(double position); + /** + * Return true if there are one or more post roll ads to play; false otherwise. + * + * @return True if there are one or more post roll ads to play; false otherwise. + */ + boolean isPostRollAvailable(); + /** * Activity states for ads implementation consumption. */ diff --git a/AnalyticsInterface/src/main/java/com/amazon/analytics/AnalyticsTags.java b/AnalyticsInterface/src/main/java/com/amazon/analytics/AnalyticsTags.java index 9f98e8a..680cea5 100644 --- a/AnalyticsInterface/src/main/java/com/amazon/analytics/AnalyticsTags.java +++ b/AnalyticsInterface/src/main/java/com/amazon/analytics/AnalyticsTags.java @@ -179,6 +179,51 @@ public class AnalyticsTags { public static final String ACTION_UPDATE_RELATED_RECOMMENDATIONS = "ACTION_UPDATE_RELATED_RECOMMENDATIONS"; + /** + * Customizable action for user authentication requested. + */ + public static final String ACTION_AUTHENTICATION_REQUESTED = "ACTION_AUTHENTICATION_REQUESTED"; + + /** + * Customizable action for user authentication succeeded. + */ + public static final String ACTION_AUTHENTICATION_SUCCEEDED = "ACTION_AUTHENTICATION_SUCCEEDED"; + + /** + * Customizable action for user authentication failed. + */ + public static final String ACTION_AUTHENTICATION_FAILED = "ACTION_AUTHENTICATION_FAILED"; + + /** + * Customizable action for user Authorization requested. + */ + public static final String ACTION_AUTHORIZATION_REQUESTED = "ACTION_AUTHORIZATION_REQUESTED"; + + /** + * Customizable action for user Authorization succeeded. + */ + public static final String ACTION_AUTHORIZATION_SUCCEEDED = "ACTION_AUTHORIZATION_SUCCEEDED"; + + /** + * Customizable action for user Authorization failed. + */ + public static final String ACTION_AUTHORIZATION_FAILED = "ACTION_AUTHORIZATION_FAILED"; + + /** + * Customizable action for user log out requested. + */ + public static final String ACTION_LOG_OUT_REQUESTED = "ACTION_LOG_OUT_REQUESTED"; + + /** + * Customizable action for user log out succeeded. + */ + public static final String ACTION_LOG_OUT_SUCCEEDED = "ACTION_LOG_OUT_SUCCEEDED"; + + /** + * Customizable action for user log out failed. + */ + public static final String ACTION_LOG_OUT_FAILED = "ACTION_LOG_OUT_FAILED"; + ///////////////////////////////////////////////////////////////////////// // Customizable attributes. // ///////////////////////////////////////////////////////////////////////// @@ -304,6 +349,11 @@ public class AnalyticsTags { */ public static final String ATTRIBUTE_VIDEO_DURATION = "ATTRIBUTE_VIDEO_DURATION"; + /** + * Customizable attribute for the duration of the ad. + */ + public static final String ATTRIBUTE_AD_DURATION = "ATTRIBUTE_AD_DURATION"; + /** * Customizable attribute for the ID of the content. */ @@ -360,6 +410,78 @@ public class AnalyticsTags { */ public static final String ATTRIBUTE_RECOMMENDATION_ID = "ATTRIBUTE_RECOMMENDATION_ID"; + /** + * Customizable attribute for the Authentication submitted + */ + public static final String ATTRIBUTE_AUTHENTICATION_SUBMITTED = + "ATTRIBUTE_AUTHENTICATION_SUBMITTED"; + + /** + * Customizable attribute for the Authentication success + */ + public static final String ATTRIBUTE_AUTHENTICATION_SUCCESS = + "ATTRIBUTE_AUTHENTICATION_SUCCESS"; + + /** + * Customizable attribute for the Authentication failure + */ + public static final String ATTRIBUTE_AUTHENTICATION_FAILURE = + "ATTRIBUTE_AUTHENTICATION_FAILURE"; + + /** + * Customizable attribute for the Authentication failure reason + */ + public static final String ATTRIBUTE_AUTHENTICATION_FAILURE_REASON = + "ATTRIBUTE_AUTHENTICATION_FAILURE_REASON"; + + /** + * Customizable attribute for the Logout submitted + */ + public static final String ATTRIBUTE_LOGOUT_SUBMITTED = + "ATTRIBUTE_LOGOUT_SUBMITTED"; + + /** + * Customizable attribute for the Logout success + */ + public static final String ATTRIBUTE_LOGOUT_SUCCESS = + "ATTRIBUTE_LOGOUT_SUCCESS"; + + /** + * Customizable attribute for the Logout failure + */ + public static final String ATTRIBUTE_LOGOUT_FAILURE = + "ATTRIBUTE_LOGOUT_FAILURE"; + + /** + * Customizable attribute for the Logout Failure reason + */ + public static final String ATTRIBUTE_LOGOUT_FAILURE_REASON = + "ATTRIBUTE_LOGOUT_FAILURE_REASON"; + + /** + * Customizable attribute for the Authorization submitted + */ + public static final String ATTRIBUTE_AUTHORIZATION_SUBMITTED = + "ATTRIBUTE_AUTHORIZATION_SUBMITTED"; + + /** + * Customizable attribute for the Authorization success + */ + public static final String ATTRIBUTE_AUTHORIZATION_SUCCESS = + "ATTRIBUTE_AUTHORIZATION_SUCCESS"; + + /** + * Customizable attribute for the Authorization failure + */ + public static final String ATTRIBUTE_AUTHORIZATION_FAILURE = + "ATTRIBUTE_AUTHORIZATION_FAILURE"; + + /** + * Customizable attribute for the Authorization failure reason + */ + public static final String ATTRIBUTE_AUTHORIZATION_FAILURE_REASON = + "ATTRIBUTE_AUTHORIZATION_FAILURE_REASON"; + ///////////////////////////////////////////////////////////////////////// // Non-Customizable screen names. // ///////////////////////////////////////////////////////////////////////// @@ -408,4 +530,4 @@ public class AnalyticsTags { */ public static final String ATTRIBUTES = "attributes"; -} \ No newline at end of file +} diff --git a/AnalyticsInterface/src/main/java/com/amazon/analytics/CustomAnalyticsTags.java b/AnalyticsInterface/src/main/java/com/amazon/analytics/CustomAnalyticsTags.java index 7656ab7..0b370b8 100644 --- a/AnalyticsInterface/src/main/java/com/amazon/analytics/CustomAnalyticsTags.java +++ b/AnalyticsInterface/src/main/java/com/amazon/analytics/CustomAnalyticsTags.java @@ -18,7 +18,7 @@ import android.util.Log; import com.amazon.android.utils.FileHelper; -import com.amazon.android.utils.Helpers; +import com.amazon.android.utils.MapHelper; import java.util.HashMap; @@ -51,7 +51,7 @@ public void init(Context context, int fileNameId) { // Read the file only if it exists. if (FileHelper.doesFileExist(context, context.getResources().getString(fileNameId))) { - mCustomTags = Helpers.loadStringMappingFromJsonFile(context, fileNameId); + mCustomTags = MapHelper.loadStringMappingFromJsonFile(context, fileNameId); Log.d(TAG, "Custom analytics tags initialized"); } } diff --git a/AnalyticsInterface/src/main/java/com/amazon/analytics/ExtraContentAttributes.java b/AnalyticsInterface/src/main/java/com/amazon/analytics/ExtraContentAttributes.java index 599ecc1..7f1547a 100644 --- a/AnalyticsInterface/src/main/java/com/amazon/analytics/ExtraContentAttributes.java +++ b/AnalyticsInterface/src/main/java/com/amazon/analytics/ExtraContentAttributes.java @@ -17,7 +17,7 @@ import android.content.Context; import android.util.Log; -import com.amazon.android.utils.Helpers; +import com.amazon.android.utils.MapHelper; import java.util.HashMap; import java.util.Map; @@ -44,7 +44,7 @@ public class ExtraContentAttributes { */ public static void init(Context context) { - mAttributeToExtraMap = Helpers.loadStringMappingFromJsonFile(context, + mAttributeToExtraMap = MapHelper.loadStringMappingFromJsonFile(context, R.string.analytics_attribute_to_content_extra_map_file); Log.d(TAG, "Extra attribute mapping: " + mAttributeToExtraMap.toString()); } diff --git a/Application/app/build.gradle b/Application/app/build.gradle index 243bbf0..b157524 100644 --- a/Application/app/build.gradle +++ b/Application/app/build.gradle @@ -44,8 +44,8 @@ android { applicationId "com.amazon.android.calypso" minSdkVersion 21 targetSdkVersion 23 - versionCode 8 - versionName "1.0.4" + versionCode 9 + versionName "1.0.5" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true } diff --git a/Application/app/src/main/AndroidManifest.xml b/Application/app/src/main/AndroidManifest.xml index 4e196e9..580a33b 100644 --- a/Application/app/src/main/AndroidManifest.xml +++ b/Application/app/src/main/AndroidManifest.xml @@ -25,7 +25,8 @@ permissions and limitations under the License. + android:noHistory="true" + android:launchMode="singleTask"> diff --git a/Application/app/src/main/assets/Navigator.json b/Application/app/src/main/assets/Navigator.json index ab505ab..1a153ff 100644 --- a/Application/app/src/main/assets/Navigator.json +++ b/Application/app/src/main/assets/Navigator.json @@ -2,7 +2,8 @@ "config": { "showRelatedContent": true, "useCategoryAsDefaultRelatedContent": true, - "searchAlgo": "basic" + "searchAlgo": "basic", + "enableCEA608": false }, "branding": { "globalTheme": "AppTheme", diff --git a/Application/settings.gradle b/Application/settings.gradle index d9084fc..4912b06 100644 --- a/Application/settings.gradle +++ b/Application/settings.gradle @@ -23,6 +23,8 @@ include ':app', ':DynamicParser', ':DataLoader', ':Utils', + // Uncomment when using ComScore Analytics + //':comscore', /* Interfaces */ ':PurchaseInterface', ':AuthInterface', @@ -59,3 +61,5 @@ project(':AMZNMediaPlayerComponent').projectDir = new File(rootProject.projectDi project(':PassThroughAdsComponent').projectDir = new File(rootProject.projectDir, '../PassThroughAdsComponent') project(':PassThroughLoginComponent').projectDir = new File(rootProject.projectDir, '../PassThroughLoginComponent') project(':LoggerAnalyticsComponent').projectDir = new File(rootProject.projectDir, '../LoggerAnalyticsComponent') +// Uncomment when using ComScore Analytics +//project(':comscore').projectDir = new File(rootProject.projectDir, '../ComScoreAnalyticsComponent/libs/comscore') diff --git a/ComScoreAnalyticsComponent/build.gradle b/ComScoreAnalyticsComponent/build.gradle new file mode 100644 index 0000000..6649c8e --- /dev/null +++ b/ComScoreAnalyticsComponent/build.gradle @@ -0,0 +1,54 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +apply plugin: 'com.android.library' + +android { + compileSdkVersion 24 + buildToolsVersion "24.0.3" + + defaultConfig { + minSdkVersion 21 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + packagingOptions { + pickFirst 'META-INF/LICENSE' + } +} + + +dependencies { + compile fileTree(include: ['*.jar'], dir: 'libs') + compile project(':ModuleInterface') + compile project(':AnalyticsInterface') + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:appcompat-v7:24.2.1' + testCompile 'junit:junit:4.12' + compile project(':comscore') +} + diff --git a/ComScoreAnalyticsComponent/libs/comscore/build.gradle b/ComScoreAnalyticsComponent/libs/comscore/build.gradle new file mode 100644 index 0000000..418f075 --- /dev/null +++ b/ComScoreAnalyticsComponent/libs/comscore/build.gradle @@ -0,0 +1,2 @@ +configurations.maybeCreate("default") +artifacts.add("default", file('comscore.aar')) \ No newline at end of file diff --git a/ComScoreAnalyticsComponent/libs/comscore/comscore.aar b/ComScoreAnalyticsComponent/libs/comscore/comscore.aar new file mode 100644 index 0000000000000000000000000000000000000000..d6a764632da77d99d5f9d9fea88b1f04345eba40 GIT binary patch literal 857444 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

MP z1`wOKMuEuykIdwFmu6Bd{6#xx{AD}J(RADsCCF@h%*d?1+I?sbPEa0f1g1}sL07jc z(^?nQY_Yqt2t>oLxI=g)Sp0z=EWUbuES-sg-a^9`m;}QN2>yM}ieN~D_aEP}{-9l{ zUsK6Zd&WxSn2ZOQ69@E7BD{}v^|1UQywbczIZswP*WIK6%N?E82%C1K=4gFIU+lE@ zWc~t=>^%&zKy0ZkWt>Kyk||9tWrznKU1n0jRRj#{)I^H54CF@AoW|QqfD2m;j8CE3 zCX9mtiLvW)S#Vd_-P_MLTPrgV7#3swcHyFGgo;`)6-U1@99c($52cPbB)5&0uy7k{ zD*F;A{{4>q{&YJ8%SDT!TCQw6Cvg-nKP>Z>{vRHmu�tB701dM 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

$&DNHXv5?#}nV!ta;6Bi^h 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 z zYV|Wdb1(w1bbCbHv7Vsjnd5WHA1CjdUCpNj{gQ*aA`QgBCfE{!?5H?L>y?6lRT*1w z=bGKC<(W*DYPPz#$%{jcr+1VXk&XODsq+uyE`guQ8QgBU&BiCE2N$2qA9J1#v^L00 z_Fs+y(3ZXZFH>dCB05#@z4>70&R;6*Ys`lr#g9pI-cdQakTYKQr&u=&-4;f<>}4B> zoD@&uTSPl$<}PR#m8v~EKt9rMa)*tNu;$bhtQ?sxckERi-D0`yTNiP+a(a;QZHmoy zxaNF0tG_IZ4Kl3G7K-&rM%;ksvhS>Vb^GN6o(q4zeri(fj1~C!JwdKJ*$ybp_jMAl zGm*uj#!OH02VVo`o6SjSnR}Ze1h!7Dx5mq7wt41Au|97Nlyl4_0!8{fQGSDBT<6D; z6ktK=gz)H8k<_@G0%~{GfcBqkXuErOp>ONrE=%RURmR=8=aLaxd+bvB??Ibw@Xk7~ zpopnX4RXwN1mO+CW5@;aSl7|r%Z+XjWq&?_4j-U!t-R>7gREPQuW z&2uf2>sce@8(AZ558@!7L3Hi`@NLtzCX z_G*u2#Cb%4RPS7P+N9%|7VACN3d{W9*T#j(%Ig*%va-4g(54OEcf?YdZR60~8+D3-q zi1^F}kW*d>B=|QiAjVDVf9!Y$hDl~(kwW0D%Ha|Kt=~fG! zXj}`k^Z05{(x2#2U(Vl+U0?lE2{L4^<3}?ZOWx_~=kv*GDn&h>$=LG2-I; zQ{wrCLqCh6la1ws+Y6)N5!l#B?9C>`!V9CD5!jZ=>@6mSam8^i@NBB&5r|Tvk7C%C zIaejx3$)qj9GmLr`o+efKqkcM3!^V^ZHjzc>TP7)o9c)9hf@x(?AJ7IEQ}k2qNm0P z2OAhCoE8}mOO!TNxj4rFK#ahPy<|9rGv`FA{Ti}5h0&^bj(#HJw~nL1WpWyHEM-PT_sHNFoS1qeTJPo86NicL_< zuxngVY@39|7o`Q^=Hc8};S|;C6K|M58z&TdwaCdpy=v*#Xs?<~hMxXIms2vxKO?XH zu)X)45sPPieU*{2YiHNC4!G#!sK5W<`$+CtLc?OG)9=L{pGM7ShxlHRUiWJMj?%Mg zm3vVlb}iL5s_nL6*^((S2tHKnbT#gT|5EQ9&#hgz`V;$by^Pys&FUP3e;BtMw3^)p zb;Wig*f~Y%Az{dWLqgZy$bN-+1*8MFm~}Vy_n_Xe zzD>zoH7OX1)JxXbbMM@hA#ujq!_;MaP{%+T3&A&00{i4F7w7M3zg1@1>6xMp6H{1f zikCaG96mx??r68+_{%24=t~Q?b$>CpC@+Uke@jwdjaKG^ON%IcZVQR2jqi{fL*A)aj;7 zKFFWcN@DG9ZGD`-GBfJ0iI!Pko9~HdSL91a8?T-En!R3ZGX`F8W_;gXVdMJA2!)yZ z44>gi6*G8pK!?wKmTA9$aE`IfQ(o+BC(Ki_ z9?h<%7x~Fsi<2|^J}D8&x|=Ml`ANE)z;DMz>~}+woo`>-9Iy@fBNJrbw#eoU%)*bSzQaR09f`Og$It6QtyD8?=M>FxeCAkO1Q(f+Xg?|!4Do$$So~|&bTP<}zf0+1pAbo0Bny?1#Ap#w zSPb4JGA!a0#Zd*A7q&nIs8kF=A;K>QASxpH5+Ou#P#GxzEs<2757NR8mdb`DQJg(w zfSgE;WI4m;GCugZY&FBT(KO$bv5p2(t>`VK>e<<66S&b<(ZA(rATanG z116kWO|7OrAT{lh&H0CuE&FU~HtRxf6o{fbqC|OduE0Y}EKU{s2roM`<#s16KT~X^ zTUrB5NDnw1YJZ*!c?kD-SE3=U-uBb7plV=<3oovk)QJFl5(OJv=K1iF`gn)gjWJca zJCw2ajHPjQn_&JcyzphJFk&dKEIrmuF^Rp|UIq%)FFTI{)2 z3>6k3`4wy{~Br9>+@jEJX+7nPwIwQ-eyUeDe?GD z2AD9VaK+cnpJ`-Fs7Z|hq>x~2oaper3FM21BV2H)Znm7(ms4yb#Q*+*Qj(1q$M!M4 zOD{^+l!$kp+OId!ZOhA#aH27m$PHNndR4%ojpJ6`ak*#1iOphR|L`nMH3YeY)b9CxV8ob3=DVLI{)NE|^Yow~N zm+=J7F4OK=v$L5DNzo+$j$=}>z?_2qiZhIhlAEtl`Q$8sW6|qZgbX z=tC`|xEoi`!xXdQ4RLi}3n{LYN9l3t197=L{NPOje|(j`1;1QWW-S1&iw zI`lHD>zGG0U0X)X7VzCANJP(gmj3Bx9sX8K3ad>^IOFf&He7zu99@=Z=$FTZvM1IG zC!Nvq7%hAwDX{7kZxT-H@^=S`LzemnBdLfNvX=)J5l%VPgFf$;Gz6zz(RkT6g1JVX zu&hS?m^b*9MS;e{i$=5>{uK zIxhK|n?d+NB>Lj0F2=+EsyJJ2!(`X)FpuOIa$!rIoY@ny`)0?&O*oLm@_X=bu zJfA%@o|UW3tX_TH|5%qA9p;!`#%o<*yT!vX3Hk-G8=US%w_WnjhK4#QN44dBFcvzJ>Nkgu2R z4D;AfLtkgMnRq(}UqoVf3;zlBQ%=WMED_#g^|4?QO7t5RiHlG~;kH2kyjCn0=(<*L zngy)tfW-IQ6t}{p2&u+GR4$49T-#)-Tz<1=LEudX z@dX|{Mq-;-Fxd31US#!^onh>y;UARQb61i(p8{W zK|vABShXCPGT4Lzbw_!{JOK9rjjZUJ-qBf+cI%VJlgg=2+^?S+sOwb1>@qA!0{J8k zbs{0c6lEvMi#Q<4yC$c}F~?Lr!ff45n>wHQ)!P4=kl~k7d)zPb^kPe~g|FVavSkY% z7ow|%y^fxJ=YqisJQ{aBkI*5R(SBOPmm`6f zBamyWEaqJU(wBXq6p{AcRxgzMN??IwbD0l-9*=MxH(v{OcKc55rgpFEGgP@eW| z?7$q`qpkE02xWhS1BMX5YKRjkmMD3xj@3DTj)c~Dpc)e0ErTZc% zuCBcoS+UVxL&-0GWw1DTLfzJw$~7r&0S-sm9%yE!j!@%+ePtrgs|iW0_Dt}^N2?A^ z*t0AbY=_MjT*n9kusNoxX^%MU%N;|rEim}< z1Z?kj%nyXc0&}?6D*~MoaIiQ+3{_*0=PiDWVf;L^zNGFoZAIH|IJlH6#}Ue*z~-Bn zK_tj|eE)|37iSoLRz*680s+xO`FEUw{J(Ps8A~@)6(>VGXIo2WXG?oKS$mWJ`N(>D z3MNnh6|i?>@%>2LWNWG0N7Dg1m)8d;wJy&VT)@1WhOtrrdsh{#MJ%hN%_~QK-~fb@oOs2c*1GcuK^*}$t*e* zY7MPtBK!75*>czNL&dEr2hF>j#*7Il?ky@s7dk`G5gtQh2n@cTIq^>~E+!KmY)t9< zQ2&bA2;k+M`%gsuApb6A=KmhEt*N22tCOkiKWvF!(A?a~)ZEa;RQ7*O{?~g0wGC$! zRm{J(i7xD8LWIR3qeDbLE$P6ODB^^g7h&dFC`74-U^iSOgU(7wHl##RnmE*96q0G}9vmA#paZ9}1^ON@w0Bitn%xA`5s%RIg`5}g}V6byzw{7)fOmw@BSp0eN!?9IPNMLZWOgyv) z(W3Df||210X2{af9kOJ&swDE&L>89P>Ioi2h!%9akc>l1SAlAQ zB}VZ~9BEy>-tmlY+Jz zF3HF9WvE3BRq{~duCvQb8P3rKhl*?TZ@Fq{JczKVu zP(DF%FW7^z+3c(~yG*H}2SBL?a4dv6lQ;IYbnHup?PQ-|lCrD8e+c0z|jdy!FwW67&W@UU+Av5&0=~2=_t45xEsVHYK<=w}*auy?y zB~g5&tGO~~wXhrou#xhnH}0@yMFT9Na0{f2Q--D9b?SruxM{q7_;0t<&srf>SFuRx zHd8>9`ohBk$uH(*6{^rf|}#VVRb*I<}j&s0lcET;YZei@&6I*Jus zW55@(Xl`Tj%SH1i=$a>F{%193!o^=bil2wdkEJ)<%!%AnGHmTtcqzw6J#gnU12^oo z4$#0e?VSD$I11c+xaFJx6TLUco)d-)!s%wm{tA{NO(v-_2|n)G!#>ChQ{hjrDt zG0Wp-K|{)YPP_ZX+3|rP^DJ70e8j1$h`L{F?=%1dLWAqJv z9_9#Ry|#pIM|EuUV2|k>ui;&oI)+oDQ~Z&3f9WF4_{*kzIU{?GCKf5y1nn*_bn;E3 z=p<9zLH~M(HI0$$7Hwf2LWEZ0OBe1kwkjRmkHMI_OEkeMIi14Vn;TX%_)8|1-yKeJe_gn{T>$MMqT{AdEwl}0o9#b+SaP2Wz(|8mq{!2 zZf!lFZBMKk_^6*(cYDaOD^{!|J2E4b8RdA^$wxO_x5 z%5Gj0L;iPsneqESfM^x~?oR;;0@4Zp?|_K)-vW_?gN>!}e-t|TKcJ{u6UqZ+1UaYw zNbNqLUI28C@K+Qp!Y>;JQpREbC`Lavz%Htjg!zX6A7w`(*je{W9B5Gj$k~sCpD3jm z5;wIkIjJk&e>|Dp&r>`PeFI|unEy@B{-Wx2gt*0k~{SFfq~{C zzc%%mgAaq_qpp(Q#`T#)Jj43P?LL6&|9UOxO9k(txkU@8h4GQyy#Pgo1?^<&SeH4wgl(NvP8tSVC@*ctwNOCbda)hz`C&u1R*t4lb2w(;Gm5Zk6=N3~rV7 z2n}|ZYSSISL%vSBrGvhq1G$(nH|H|=!87F$mmj+q2Zla4fuI4(2r$R1L(Op%V(l8c zMFGrU`VHM$19mv_ArY8y4LySPYys|=+om3|d%gffOg@v>usvgdJZ8`Mtu5e&!6$Xk z8*az^^~WG0mf!HLHeiSGGiPrG?hj!fp&0 zECncf4nye9icov5{2zYj!KSy!KhQZ0ISWwK`gVRY#1ig6^C4_P(Iem1iCwb|RKoqG z2~55v2mC=5MCqEo^+aMBjK%y`0I%GuWttvBf-}Y(W{NUS8&;q)W~EDU=T-*@YRLUA<2+G$PhNMY!#F9&PgosI+3xzf1L5oejgL4^c`$0ZYmZv=&twC5w zKy3<_7pFL6$mF(ffz_!oHw6P9X|f5NHv{}eA72ehh~nZhfx8Q17}SJAf(+_6p;u(P zKDu7xaf2OHd-g%#=D;w;nlZli0l+$xMPW4DiNawp>jcVS(VLzz0VdYY&^UC4soTBL zQbs*k2U&UMnlInD02gaJ@Rv7YJaWUC98m1e5%z{>YBVW#`1p?WF{zFi8{I+5CO#PC zj54WrywhJFHur?`kAyJ^cf?f*cgBwlQATOuaq3)y=7z)rtMgd05%^)jO#;dMMVS?L zYD>bs| z3ZCQa3vF8@-`;JO5BmIBxf%x#?335a(;C>no?x21Z5|g#8oEUg4D>Ga!Z|R z!E*oFEbhtrVR|%chnq_Np$Jfo= zWUxzvr};6LxW4`PCB5MaW3%*^VAUUlV`@sjpclby_1={0vQ9_s&?TKJ6D?wH>S%Fp zZuGc%#H`0**9R!X8UC$M*J?flX$|0@D-!xu?9GzTe8^} z`(5-T2^4o7o_J^d+CrF(yjuNns@tu4K&Ds^A-7X$+LK8%+M_-CK%C}7cqXqi`q=$u zI{9Q(4ris;^5vTIFBlA~4l_D2hecZb?e)4YJ6W*wy&U3KCo!662fpyPZGTxuL_t@8{Y>#>n0;|hyl$-kW?rFaMIWqG!; zx)<0mg|Zj(Xo=%FDGkdjbuk6Xzr-j51hh4ttg|zE`O4z|TnH#!hM;CwKv@*yp#43r zk)RmI^DNAsX_jJ;$~mP46aGxu>OL1>a~w+1nE0u+dbr)AB_geEdAVE&z4 z4E6F7^5Xtud^SlSTynMw|IK-N9#N*7G}sjTV=Gep!$)D9*bLyggz>pP+jw+}fi|!x z2+#Bxg|#Sy#UZKYN;vtwk63sabwW3K*$%}M_6u-tEjZ^w++$F>v-+#05=5|I8ogI6 zghGWc^wB3@N_8fJs_SH0?moS2v5Rh5_IK4ordI8`U0FQa5(7n&R|7+8g#$2^nN=0{u zzNvFg6(4r^teuAD;$*d(l$26LvlXxow>`WubXoLsD?^e%@`4XLRTnZ^HAvL3Ago;s#2^CRTf+EN8v+&CmkkURYnGlwmGO*t&9NQv zFbjt_&_!v9r~5qJ2WW3WCmJ$l*?gHbf#7~x<6#D}3eZbY1cxuSq(;XIwsq9m=)eiF zBELLhL%noZMYOGGGADVP$uhn~Wgy#uvJ$r`T5WFHlw+x)2gx$7DkQvEz8taYk$o*0 zw{tdn;j){n$DWk5dI_~#XLZ&gUPt%mxE|Hq;g=&`Hy+L5iz~T#MkF+hFtbp~-=mV7 z)|Qgcd3O=#n{LQa(7CI6c1Z>qy{sOJ5c3l6cX@BhrRiN`U*o5$bnspu=E1xKbKKzf zq70{WQvIVF0LDCp2>@o^x2E&PMZUHTvSW|?gL}Veb~-}LKop9rmqLtLsgIw(9x)Uu zI6y_e80^0UIqX&6erPm8i6ypHf7My|YI+uP|NX6_tzCzK9$({%*!FHn_yDzsZB}}s zj-l3OHnRJP_xtE3>7AwmSsPPH(n^uWe9!m$r$#rF&#o%s!x!0+M~m-~_>fq;c1f!Z2nCbF%~Em@K<9 zLdTib3WjnCtd6gri&m}WP$;1r;-hMO@ zmg5VYwrl^_rRXYxv!>V2JyMGr*QBRG$&2n7;adt6Y7MW+g!}j1nji;lIJ>ovxA^hF z-{VxqbyH04k~LjP>m~d7t|kv7Fa1Z9F;Q#;fVCE>V?Dri*41vktFn$T6H7eiB?sK# zgbvC+-gvpKq^g(Xa}l}PWB(Il8*^r^ap}>uji1`P4I67UV$JAr$;obsS=G!j;HiIz za=Ktx4Y+&Gp-!EA*8_}}&x3d}sd6 zD4W)NqN+NAtQ$EjxnU|EbH$W|4I6a2!fs08RS!$9>e6n2k$YviP?~h&?4?)=EJsLR zTGYzWcv+;omvuu@B`#QndWPZ!ivPL}IC<|EZ}$FU>nMboqprJ87mjlo7}psb_<-KY z0NJ_h89K6Ibi?32M(E-3Q}yB#Q^z76YY`$epD8lDpLfHs$^8|?Yo%jC%Hif@Wt|#% zdmoc0u3IkD-2>7(SB?B{uk@#cd;p>UqSyE-U=?1@YW>WN6QuN#8|31W8pQEOEK#SK zM#uvU-d~7+2_b{A6qFJ;5RhTqeQJqeDoVrpV?0Mfyf_*6$-0Pz7J%H5=k`hXYfrt%b+6hTJ<9tF)oy9@op9Gr)8 zm-2_X>Sl-|+6N=$t|i(QM>$cHxawwfQ3O5@-EKm}PczlWea0Uspd}EKWo=NU;5t9| z^s-PK7{TFBuw=SO{F&Qkv3$B{4AS%cJpt-HzPY?!X&rpIt%b+_^--`sahhASqaLTCxQ=cR>R6&q( zN3xp@GakFm#6b!M0Y>k|c3QBX52S7 zDPa(6ciu>2M{@WKU9IDwbsh%KNE4IDi<$)zSNn;7pBQRQ@LSb?O$CJs*!^g@&07F2$ zzj0vmFBSt@Fm4%a`a#D9HxGG5=6tHBn~VltI2*p`!a_I;v&<3%g?XL$LnfvYqgfgx`3De-Dt?`L2%d%8oj%xd?VNN}ro zYwiW2H`=pob&+cQgZFsl4{i8*ch6$jyC)>WcE-Ax;8^j$-1(fK>&fiR=AC$XGqX>q zHyzuUXW;G7+mv?#Ggi{xhiX4MC@Mm0ad_yJG#lV^i8LU|J4gp9^W}u3T0XfXSLHw6 z^^jQ&xoXs>iPKa1!YbDRmfR<|ftDZFqIQleF4kkB*KL9fdmJ~~*KJpkeq~KtV;Xu( zTj{?e=@xk9V<2-|ZDSX}P#b+}6}aGqg)~>>HHWI+_41;yZz#_Nrtn04JBQh&B57Kg zwyEH=&`6dH+oiqy#x%w*Yjis@lIOK>B|Ovf&$*?g8yAc4ENwl-$Ioj{UX!}D))%~1 zW@bvC^6uR-5IY67&RjW?hhe*zp!$Jvq5Dp?JiHO+>gTDjUdtzq)EpwYK)W#hir^j- z`uQ7dTRWkW8L}dr`ux3k32W;KTHH7Iy-GvRvapZVU-oMQv$VLfO+!sBMEGzlAx+;@ z)x0Im>P^2aLt7ZM<_^=y645QUfEF}$7O*$ek-*e4HK&f+upV7L8qy?MI2$2^8)=FF z#n2L!KsR7h44!#%7QyNiz=H^ZOhtBU*ie?%=#cyoB1J}-8cB$eR;7Ul*N)PN0cl=n zgM(6niC|91usm#!fbkbci*MH`q5YMAPFverGij^~h88r2M`kM`ga&WG4Gb`1$+M-Re2iP0BEixz zJHSURl8Rl_@}8}*m2J`)vO~1aZ?|cMdLRkZY_ffz!gy*!hK1knef;4F#WLC;xPU2*XFRDu-EFao$%Lg*yLGEy%Ru`A%H`80G{5B z0gee1juF5MS8M9QJgB`{HV_Txy>-iYB%DAvWN>fiT8O=YMFaA$^PkqHdu+J zH|WrfwN_kQ({GWUG*#Z9^c0}$-%GWh}L379{FUH?S9jK5-S(;gtcHbwF8 zUom|H1NjfqqIwxVllSa7s19zjM)+56_&M|b+}-cI)JkYM*C z5-0Uh#HdsIlpZO3s5!-2d9N%7bADf!(O7^$W@xDhpIHqyO`6-i+{NY?WcFcN(_2zJuZ=%P!oGea7m*MIkk1C)eExtk}(#dT>XPYiZ44wWPOxl$V(u zgLwk4A1@?ufUBYS87pNRsJi>dJ$^akp966{P{`vD@SQ`Rs+qC(6IYNJEgHsw-rCk$ zzo)?Xs6y@sTD2`G_T)m|l%gPi{qOXkQb|LLG{1}&(m&*9> zn3f+urdd1k$ycC%RR@U=R#7k4Lf*Ya7Ejj3euz^p9fN)c;Z-IU(R zuX0z3KK|gHM_Ve_=e5#^OzU_mqe3@ zG0Tv*w^5KzW?H<8YY+^j!W?PzhK#)c6+yH|GOP^_OKPyXwF{_@h|H27-(2xM$s8`a z41rc@Ba_x}sb%#oc}J1;bRgk}TXDUVbLa12bTs z_A@yD5XMd|z*mc11B2CGy(N3D`~!I@s{ioUmdoJeB6F7ha>ZtadL&S@-mFb0*>;eU zO{OgXDj^X;*9K9wo=W-;3VDvGLpH?3hp^kW}T_+9*&9tIK(T9;*stT-6hnQQjD@nWq=AzRD

  • 8hPc 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

    S&__4)ZXM3}2qsIZ?=0f&82a=A8 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%0D$_mwkU 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

  • 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 z z!$kTYFIO@;TuE*7s3h9H+VoSll8OFGXxrnxyAqexKMF7MCF=&Gg6uNy)dU$44i>(8 z@bgOLeZI>wuh{Qj+G^vdq;(*b`l((?woQa>V}5_1o=7l|a*<7fXy~I7MfTaN2e!mJ zuc(uW0BzEhm-t9jeqNfoBo^ejXje(OO?+|1)#j^FK{|^!xsG$BUp+`Be;Y_%d5zG1 zCPgV}(5q_>q=G?|iy{(a#uQvNfxihOxI*^xbtP5lRopA0DMFYTUU3rQ8x*v7O@bsU zC~onl1Stv~{Ea)4Se2;k6~LD0qWfEbpY+4m*FOpn!hDIWjpbqnDo@2XF7rNR+917% z+$EBWx!eqNd?ht?IfJBw&?>PMoVL)sW#OgtW z;7E{$hf;9_zI{Yo^MMc}RZ_=HhF@2zpORk8*mRh9J&^bnv*A@jie7PVkPw2lL48~jK)Ovrj`KmcdPaF692WgjWCOmLl z)Av*_^Z&=3{_KGIqx`GKhF20lI{k${u@6uGhQ7I1f>Wf&K}3rW39$P}fYF|i1i5

    0ilVnuEbXX=AjV+H02h5A4!r($^V#XQ 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

    k)VCccTxy-!vO+! z6S#*yaKrO5GXrZVx2`=Waj(Ae8Q#<%`YMk~`ZiXSbY`ZnYA=;Wk7BC-37Tqa=$&Q* zCsSv_!WF*{s=Jz3DiLtER3eXa9erJ*{*4l$qFN=F9!!|`u+%;;p;`Se-sPk(62JZ~ z^l^?gyN)SL)~Uk!Lhbqu2NV|M5_`mm-hTc^ATU+RoGNuO;MVyMQpYzV+jXnLDv(Sn zelPKVgmto{I$6`H_y@e1-BM45&2=}5(v4CZRbKrLwO=<|#?8d%l)56icrZcq&7ji_ zSpc3YqL5mv_YJ|^z8k%(`Lw7@qAzz02>RQ5NaUzgT~`GeO~~7-sHAVkF}aRsHAi@E zlPENiWete>+rJe;h0Bh5*3^(NSFhn^eYJ$0a?E>=kH6o;i+QVRI6aQ@@-iNYK;2V< z)T5>NoPskGStGoww5&T$L{|~1JU_k-WL@=DIwtJr}rUq87U1Xl7T@G05Lv z)=dz&KyFopF+z0pD2qE*qp#{Kkg5!+yNJ%7)vgXBbguSw{PPoU45{lt9U4+c-}(Ia zcXcXy3)hgp_A4W=;(AiI2V}8*PQb6-eB+OKs%p8FiTB>dN6K5tyQg15E02EdXWsR9 z-~ThY&OHJ@^xRP2^?|<+*U#u%Q=iQvPG8n%=wGR+7o#?KKB*t=yF{qJ{PW%QmwoQ9 zAN+Y^{lMf6^}nRn=pU`F?}?8`s_VPqj<$8!3MTb|9{cZi$% z5&HLVMvaY=XF~mObSW>Gf-|Ggn|Z8aJr^`cd9EJ%_cjVrv3UQq`Ava}z!hbOJkn_R zZV@C|)IHKfr;Dy{y_LM1Ay>j6xe~s2ictCa9kN$$BYSqG7nTNdd)_84C6~!db)tOMysMaqb zrwliy`+k--re01!rL7*CHFQx_Ezq+g` z;Q!z^noC?FX($o4d2F&36_*h8dEVu`O|5?@mYOQ{bgI{ zvlP~p*2@-4bQz6 zx{6~R^;JLcsYa42U-z~&lvK_YwQ$09w0hNR7hXr2a7!y~Lp@8b&h{H`B~9!7hzOp) zQP<*0*U)iQ``+op6^#&{rY+-$+9=Psbkr#Li}cOK{Fc%tT$g+mtEL)>X7`#!FizAE}gQ!gh7X)%`GVyxl&i>58cYSQT~M)Fg^znkI= zMjf`>B2plI(dMllVtvlT+~+>%=U+p*gj~*wo3^Mm?x-!}(uqjDJ}WD8y8j7kYg{@u z)-veetLnpN9Xj!;oZz_+^I3Nx*FK3~4mbF<^a->ogEYye`*TT&re8?7ocUwibe zP5x~7_&EJN8#nwQR(nQ@uEG9c?j~I6mQ&HGp6$~sJ``sJ%G80&rp^%p zwH2ET6^&ZgMP8m?(WrB6t?w9Yna;%c?XGp?P@=o1jd1t4NRaD6#P6sWPZbBo;i{iV z^R#Lx@69E=H}u=n=uiEV+F_oJE;X_^ucC>)*^S0vImu&PG}+#<8*oV`0yCxuO4WfO znO;s;<`-*?_VUtL*EJG%1~};FXJyHS=R}A4g^iq#eR6jUwtfj&#FAi-L{F{H+{k;A zTpcoqbRa$*yG2L+o_FXn0V-#P&iBqx9x%i`$Cj$D0e;XwivJlQH8&_!(0}y-ZWgCk zEZ8Z!GQHEbsFzODTvOg8xX?Eh-BI57EuLwM5oh;*Gaa`!%J`;y_{#R=H46~E=i-~P(zRLDe8ZjzCO88>z*j1s(AnG^v4v| z(1%$(ThIXxtZ5)D-*Ox#;;zfpzV!BLl(RRd!F%mNue;H^pxIjto^9_3Uq6&(%NH9T zcb2k40^O|$lslZ=DQuUcllV2paItzu$9T4TjdAkgIXcdB0Jo|i$P8cMIyQ99q=?rTuZ&=aXBn5GcGYr4Il8&KBDkCCY;yYUs{TIWAmwq7?~h1|3R|w zEu>8c`4qq(O@D$r8drTu^W)^9$dN4tjs{s0>>u48@-$#y{C`TDXPjmY{sF&-o5GQq zp5G7@R-H(|X$kFkY&E4J03y|6C>gCxy_;DRdqyA++MbShvZlW9in}=ci zw2=-k;-=G?hC}Dg(xqOnJNHoPRGog@=6{9GG#fl9(05T-|d@^&h*WFDCQskE*e4lp!ZarNBwRlmB)H> zV9IoVjO>o?2sN4QpSqBAKKULIMg*q11}@!L@q-qZ1RmG$Rw`w1fmHyjM;X9y>XOL)JDa&`iFO)0lO)baXNzlb_=6aJTnOR#oh2_IB{4sq5{* zBc5@z+4%~6Y4|1lkSFVC=#c07qo;7lW41;f@{BzuG_^eBQ7#IF4%FQ`@=XpDZt$!0 zYim3idvW%>dW^?`(KL9PGJVE|OfuiqXfkX3-Eb6VVhvx;!K=OQxGbvYo36tyWZ|0D zOcfU##9`+8pSqyo+|Tfre%wZ7(0!Rv6(0r^H;G?eYB=!n-`j=l z)zb3$0=P>mHi+dnN8R93<5=hW7BqNju$jx6DR6wyKNFu=O>nD5)oT&ogG^Xc#pY;# zXDYE^->v6RsFLZ|Lj6S)qU`F+6mEs7Q!94gG9xSbGk>}irl{9Yfb)@2b_s4ZgF)*UyBPUXBSdHI{t|gk%|R-!QI1)uFmurkFlYu8ZC~i5T{drW5aOc zLFX*=atbr`YcuxZgxZaR9dPgPWbCBj@FInod@M5dVuvdB=n3m4busSrKhVs(SMd>= zR8^VY7xMvm75x6*=RZuU%4w*-->dPtG-^*H-`U`B1cyo8KU0mql&7|C0`e>?_7e+8 zu@^1liv1K#^#yU>G+o6l@!&C5qj52=(^p>C`l{!# z>EU;e;_#y+r0ctS+?%|wug2X;>h<0ARdmweb#EH}`YOb@Z}wKKD-63oxk@^&)>nQ> z#k8KyUNLpEBXzh#?Yso1q1U|%Iq;5-Nj=~(uJ)pLVO+1Te2};p9q-N9l@lc)n+IRkhc+NpIZfF>dnIdJfdz>)~8`)4F;%%igKoJr%^4uVM$$ zxtqB5Evx273V!KiVIOC7RC7gj*VJ0Ke@n%@*}#8%73-;v)SvPEN@0C8imAPR@i8&j z#pG)J8`sAqf4If?BBy6u1))9I7UOD8-Muo9v9e;p%7Dx2bys`Osb~_=b;?<%ny&L+ z=E->~^-D*F$GF0qgZ+6*g+0%CF?F+kbS=Jla$e-auOG8rKL*9Q9cAh@uBcB~*p&H` ztH7nNXcE0S>-A%EPzl%9YmmOjy}H6!ZK(I+CQ6%JU1t)d;Vm^*EZ79D?zr4{^=8K7 zpn0apdnF0;UV0G80k3mBY)dh?n^nX0RdmDKLl;wY?$xSkgLJ7m>pUMh->zpgEUSHLv`E!-1hh$&rbaFIZ1zte~V~xE3 zwZ5?$9m-%`$TnO}equ&7KiuAgI~P^5(2%NiYP?8fe4M8&rhcw>yqdNlIW@t1lsmlR zb%D#|(|?a~r_WgH$=S8pxLfW2jAS}KPKq-O@^3ssS9=?{FZUuck;R4Rof7Aps^hZs z@1$^zkwobkFJ1hr?@&<_sEyP{<|dWPs%}q?VGH|m9%fpUNp<88(i0-+{MG()=Qtv&|!z`Uf?lR<8EBI zM$t#oj61zJ02>Pz{?Mo`T-b#Bp-%d>IlBvcYa2KGpo+p>@c6j;&hi>G+_>8nRX!z7 zU9ZB$gcgV0xH#-o7Kd6IY8yY!twm_rp%X0x0Bk^$zv!V=ZFI#3jJt+wom!8Ulav+) zuW>K`bdT4#D{N&%sgOi)MfBwC^faLl5nLH}`(1Q6iN#TP89S1zxp-cd7f0h>k`Ud- zJTxAc#)~85)CF1nHy6cjn#|SyJ`yduCh68x+^mE8G^MM%T6DGIkkZws|2pxSchGeX zE{*)QaeHs3nm*S(LG5uZ(}g-bk#_!JelbP3R+iGrx6~v3Ie}ZL=Q~ykuDDyr#jQkx zMTcBG`Es6}a)3Opu3`^6DeIvz);%WdMG2F+4^C4H82%P4;L0}IXYZ{@jr<=hKY z!Q8qoDrw)DvpY~q9349<1&wod<3Ls=V(y`FacX@PolX`0O+C?9rO;o3sd#eE(E$Iz z!(NZEhRE*Y%dFb>_6k}X7E~vHh<3|28a?Ap!!y?Ft430@lBrA%$jc!brBqy!tA_I% zG}YdW-Ja1nL^bFOd*-Q;8d|^M##(*V%OdB~(~yN$+CP9kV9opEU9g+});KQc3u>Bw{8ELQ1wGc^^(>($-`bn{NYN}ih*>fE2xhcHH|g)}wa z0PpoL{TF)wT%a^maX5bElj8)hamR3tz5@ODK-~&jB+$KhmijR+MmC=GwNS=Q{Myv| z)CINriuuxD`C_!##P&Kg-rliGk*96`GOqkJXaj1<9YHqz^q1hKqCMXhz}16WGL(vc z@t@oY+>J)ACS>SKxDa;nbL(}f#vP7sD&uZ?MpJn1FzOYBGPd!pJJE%^k?QIF?h?=$pMnZ-%bY?!^rJ*B!DawL>6`# z7kBI{E`_)UsqxcaTf|;&quyp=Ka)SBo-RHR(bFz+Pqn`Jg69wFW_2B%M|(c0zYk|+ zk~}N9J5wacnuEr~&khEph`GKhlYhQWUH>J|#6hO~pZ?_eb%O=2_@ch@dkTcy9OFZa zh2qkZq7w=$VP(`simiXxB<(VGV+T{oQ*#MpCHPpsX#>rZ~7vgr^cm6k$4dFjY6Njx;`4SJ!9Y0`EC&c#!YoqSZ9VO zXSHtvR;>-V$)yOmmXf+mr{Du;B?np2-~KTtU+Z14-jh+oHFxYCy1Ex75y;c=vHkRi zCz}J|t2*r_rd>}q^^!{I)PTYV?ie)7nH599b)`2a4k;+6^6i^ugZz0E&vcY)JWe>- za!%LH@HfrE*;rADWjwF*-{a!x(_Meg;s+pM&1U<*FQG=?s}Lb`4$Ogoo5!=}koI5O zti-FPbDe|i%<1ZXY-Uqn=GB?g{Vz-L3|uI}uKF(IRZJDUOMZ!M zy4qxnlY8PBhxRLeGwP1q8wzmi3Kve67J(W5fo*rCPa9o{=Zzg))Uqp%mR-sA|7NFR zA1~rOHDDKZUCp~dg;%#MOkH@F7k^YLzSp~ee*rH2je&|QaBZQ(Lf_rgEfhzVCugt! zW)z5*v&yw%ua7fdb;#8|_2w8?f8V%xZ)tq}e(&q$vuRzR-}M>^i-l5f8VT+gEb6ZJ zPLB8J>J4Z#Qd8aE;v1J^n7pv~&%J8uoXcDV=Q{a%=roluhy>6pg1LB%Hr( z{O|uPlzL5l?Jo6ImdaN={|(Hi8yci?(ly=p0{r8H{%5b^4JZ{zGEea;l@iHyz6z2; zrvGMQjCYRnyv!y;aQ+1C0KHO1_im(4MnV;av?Z;j%Nh097hW=zuMvO=Bj?;P4 z)MU-k^wI)NA&}~Nt*6o7tAYIU8eC3rJ6z-6vX8sbo6wD}&GOCAN&BQrf8&#y8=M$V zn$FW$Z=zEP=~IicBa90}rtAf0%1*J5qxK5ixpCT$1~UD%*T`p(^Ae;}sjmEX;to$2 z^j1AH)D#Sv!Q*F&Y6J91pJOUD4YZnUvj=9o92VQ`;WKBAZjGEcYho+pXm??u*)hCz z#_+!B`S#+0n4I}`hk2meWw8#NW3vpLWV4L17iSZ4g4tSPc3e1N+O$lpWHuEKhkSgv z%pnZ)nc25BZJ2F#rQ7pOR`Ya|)oq4>IZm^~InZUA?J_%EX2-xeX4_ng%{j2l?wIQ= zG3A>Frr8P{c1uC-G}G+dEVI>Ya+(KDa_5`VEqM-;WBwR>fq7uDy})fXI|t4|d@kpD zzySGweo09Z_NCZv3(GAwxr*e{83c}V+wxr&yUjVE=zoeOR}o6BKrWwMVzHr^<{~>I zU>J-vz+}743`U2;?tmF4hYe*3W6gQ)*)ZMg$g?}mkYk%`vzOT*-9CFZ<{GT#QnS_I zG`kEgyWyX9DvVR7BY&V(qD{KN)gTue8-Qg1j4%Vn!gRRe47KDkIp>C&nTBt?ofe9j zW;0pmyDa(6mS|(C+2)#PE3`wOzB9q%G}=sgR&xQqwXKdQKqn48*qpg8C;fK1a!Xt? z;4aAzLMA0M2$aZxQvvc6pd=5HgQXM_CC=-Cv%sfRn!{n5pKfuwkh6*4wA^5ZJ`=-v zoRT-kobTd1hE>Zjm4v-zx5yh~w_43yk%PTeN)3m(=J`~*Pv2Q>wBfRIc3M^oksA)B zG+mw0h6rcEM3~hEKD`Cc!y&Rn7~d02&LZj;_J2Bzu-GiFku7YS%w=m#TjDBlyZ)!< zaK7EP0$obPto9lYyOTiAD*6L~i0+mzWqw?Kx>irL6h z0BdmaTSI0eKUh(L@lnay0FOo5PwW|<2x zw;;=Wz1!k27o)Lu2GuEO(oa!gPl*;E#6CFX+HjX5j1(3!6%=Hob z%vL8sneIF*>4if^^+|7g8KR0dyUS8Ie}bi;z-;3g|69gLw!HsyZcm#gGtFv6ACXMT zXlw(SlT^DPxGY!(?+> zxI0o-WU-nJ1!j|MPOzvnZrNs=Q<)dR31U^4D+;>&7I4nBl%TOU&jl`AW&fMhdi;~X z5#c2L2MgVCyseYeI>l`}C~j7XyQBoo=cNONz{CQp88Xo&&BLW{vfYJZb|3>BMJ`XK z$?e2fDQG~^12c--tW*f$$GYkF@$lIwNTL>5oQQ**89`abM$m164N{9J%&AI@M;0XK z8%lTq{yWKTOUeu8nr#Ijy~&Rxr^{Y~8z^&068ht%W+=*od^aMC(ObtU?IdZTu1HVZ z#go?LyG&r_8+NXeP~a#oG|_L|=-}@HGvrxZSe$slN2%TF#;rh^#a3W11CzVJVuw;o zf!PjDcOGtWgPxvizOo<$G0GBwEe4K3`)KIxgfUYxvd2uxGD337WdjD`zhubCHfF)3 zoH0g2niGvPpCg4Pi`DHgqcWX|AVFA!#awK6%$E>Z%JyZ9-Hkh)0%@lIbD!hX9Em(M z@}_*(I7^}ZKUt9eTk)gQ+EAX&HYS^j%>{e|nr(KSamhutHr?c~m~3ahokB~{YZ!~x zHy>C2`4f?*N!it%$;Mpfc`oS{S0+cMo$u#!bEb_Oieu$+;8uRV*?G3QHx9vxwi35X zS|-k>B&n$>Zr6XMt!d`s5<9tp)aV&+NQq=}424Y1XI?A9jKpZm?1`uoXStOuT-fbr zeo(?qc?O3^TPZeurrU9Hol+#m7hZG0+0^V74gS{}l0^7lZtkqk+7|6)yYn38*%tED z&rW0WkwUTD7Kdp|;5>^qT?!TP2Hds+b0Mx?1u%;*#n(cH*;QmOP)=VA(g_Xsu}TLI zNEt8)#+Yn2yUQRQj~Q?iiu(XVfwCl>QI>6H7uAxv#wmIh*6)bbfYX=!Im4iNko4bK zR+EREVIQc);ae7hGaMF|IsI%{xfV_R=kb!Z+prYN5p_CVIOF8qHVf`Gkc`}m9DJXK zuV>v^Y!OjDqcbP$5TeBHw9L!RMvXHUPzdTQHr3{NN6(&yxfZLH2R68R81m-R;YYsN z(6i@RXC>04y6p04okOAoeP)fG*moijV{|f^X_ta61W&WOOxAR>ZMLh3&Rypf;ntdh z2z@5?oyjBSO4&97@y9uw&2-pNEUvR?Cv&pWc}Goo`Doi`7g^@awHDj#CD%KgE_Z3! zy!khzjUF@BIBxueiIc8O&zL+Vb81%hw4CWPuDW{WpyZUnms~pJvZ1NDNy9D}bzyJl zb-}2_;loCZ?Dwymu4wUc%|M_KP2!o|WuIE~{4ATVOuOC6MQ9-M(r+h>OPiQ(9E-|q z03Kv87bF_&ZkNGcNI^Q%6aoR6l`0spsS>N1qFzpSe!ki1EOc9~^C9U!{Q(}!;?oJ+ z8HVf(G{ArX1At5xzLl7q6xyO*oYk?3jDje3Yz&q|pCD=4{1WppL$TZHvY?mX8c6ZX zqym%6G~AGfH41PmbU8``+D9uj##)>u@{}582rF*G9sK3JpjZ3o_R&}z>+~9KpoKe> z5o(oUQxxJd+VbrMD5YVBJc|w6;+0$ShOI~7f-hD+>#<178m5vGt3}eqf%B5e%F2>B zn{Ee|$L7ohNbjs^XV@j0VS}Kg7)-^`4}T2O066%GGD^eXl!BcG6KTiUHn5W=<0Gw= zuHuq`kZZ9)E=~=wTChP>7%&vm0^l^~I|-ZO z!RYL1FaQQZG+bkY_Hc~@qTm`ATnyJ-487o*UXTJQhBC8xt`m~^6JL=4z2O62iW~$N zIS@pq2*wA#@V+I}1B#uv`t>x(6H~GpaE8Yu(yy1MAva&q?W4fZ2l}2>GoY+!XCt^4 z>KngfhZ@i$mJ@bXCmY#4d~bN;y!&L@xmY&TEL}69*R-t zT=rp*IR({yyb)D?z(BzN6RlSBY@9BpJg432<{LR~?v(8)8afz&z?l_tTlRx?UD9xd zn1@{6biaT6L$?MMGl;z+YPr}Sq-hw5oh&su$W(EA1--9M>Rp`FyCApsgrwdXNxidM z-RzQLH>Y|W6?Tg>oD!F-a#S_Y?i@JUZLtLW|<>!Do6lQC5l9hND&dDK_sX?)udWf z0i3RaVZ(wGKzhwH7379cC3J36YH_&SsF=k(4q?Dqj}s?4RGgoELY~QK$F&ok{ATtAqyE3zB zZf=Ro5y1xzKubivy<~nX6rJdsBe1#Ixl*Jh5}%RlFqc?OG?Co%A~JDyqD78C%Eco& zb2=@vZIQ^55`JVDQJ-JwY>5nii^!r=J}!uY+(P*@DVIhwG?a9i!%`4>&o`mk6`HI# zWJ&$!T@^A1(pE;cXh~saVgeeqv@7vfCZ-HbV=x&BiD@#uqs5y@IDAgRC%0FCN^f&P zKALPR(2=nNtoAZGN4Ay}nV`Tj+u}lHM4n-u^kTBw+{G~4VJa!YO&qR$7Sv~HLZd~* zWuHP}lByaU=6sx=Xy&Z*qv7IcFc`{;Os+nChvCK{cYOMk(P`3n5=jNnBVR1qNO`$lbK`Yy;h; zH7NQNLYFy6XB`nap=+itvo>ERZuqXL3Qn02Ekof@K~Ua4Dku4}c~TCjwo-;Qhv_Wp`6N1PaXgRuV6I zZLT7V6K+J4P<#Q*w%YShlEHDaJDi5OX1ef0vXgTQ%xz`fXf+k*6`0TqyZ~-=+h`Oq z1DilW%#!*7Bl`gHfZB&0FqGP@xJ+BkAhibj#G1+)^I* z?IX=%`C^Klrji25)B8AfLdp(@EmHJdG4b*n&$743vWI6`TIK~`O_SlG%fXZlm%~N4 z_=1ThGg>^_s+(?r{CsILNVW$ZsQh9?z|BxF9R^;G8wMN^+QZMf7RM$Z3g)BykUTG4 zfEx;{oR7IqK&P;v6wFiLUzdZ~4*vr4^>F#+XfR+T{&vAgux7)E5tjqX7Jn-W(yNyN ztWL}Ts|$)JLek|>oDTi)w*`u=P+SZ)6R8c(W?Z6sUJi6)*9ASnRz_&BXTeQK%?>x+ z1Ss#Dpd=moUk)W!=nqLF`vH1Z{rf|S6JNlA3*Y77$cB-~k|Q5y2#-OR;Cz%iU zfE$~UBf&{)Hfn<0U9$cpHRlaDQ-J%f;3|^<#G*`5vGR*>EzYCJ1N}0iz$Fadec9bO zmHBmWgA5m1?KmL0x%`=&G8Ejla6)9IgP8CaP9&7Y-*R!=*^)*O<1Df}!YE0vrRau1 z8MTw^l9*~uR6^mTM7_5TPEnvCmnaZXFEUvRc{h`XASD6@r{ubVQ@Iaav_hAF{-piL za}EcpFm1yW*X3~FW=tPois^bdkclbVm7JWLf$sRcT-0Op#PrFjxw*4#?%e!&^O93& z6NKJ{-D=67Z%i>70s76HJXCQ$lLv=gVt1H_qH6G)xyH%axyeIYU%5)qc6%(FX6AqO~%+jHQt^PgXBEm7=!9UKn@A*1bF#oxy{Nj(mA*qWocp46|dlc^YcH zgCZKnc_))yTl@`0y3=q*xm*-4A8WSKD4f20k_We-(?${Z4_=HZ{H{vVZZYm(Hno?LuittZlosx_-C*a<}m52Vd!jIFKb)}@ImvZHt zNVDg%R>g2qCFiCL8tX1Do3julaE!f zR1p6U=FcT^KTn_ZDa=jj!xK{q74tkOH_R3v*Gm4QIh-tQ9u-rSZFW+a>9_{}L}Pd< z-LZ6?KugB#gp~}Z%BI+VjII~Yh`YmLCX@rDNPfRDK_0L3h zVw$HXzLWQr%k;F^JD%=y!#2o*ec$5hKYeEUyiN5uTrt+$w(}?z4=X=S#zR zM)z@IW(&8ApXO(nY^K>r^ki=0N$Eun>B%UbgkES^PR`mX^flbY{LlN^hM7DmQKXql zG>c7h&ACo4`&^f4HsVtTN3?}|4jyNlcp~v;n-5J_sgZ{g`=9E`{T2Wyi7TN@+kf=yeK`p{v|!#y`*}h?%?m`l>=ltjkn13 z=z0GG54@RnWBkkG_uNpaw0Fg*+t$oWc%}0u`8ig?*UI$=$9AS*JF-!mIg*p*4%q-jLAgWzgLTwkIF-^4oOs z1wV9h_(2FS8$qkh@$zp z$xloAm*(d3Ym^1KZX12f&KQxO%Ja>Z*|ty%MhLDQ!-ip5yDgvVP`){rJ_C^}eZcRy zW!$!~QXmJv3yyba3s(M@k%kQ`#D&cjc9@x)pDSfar%H66od01E>SOEkPvz9ZK#|lI zh1)tNY;^?!e_9>VnF{H?6pvlgiJQq5{O~DV;=8!bI%O8@oZCf(=_shw9Jj98b)rXn7c$6Z4HHoSc#M%OdNSNjsZlt9>>Wk#rp2 zQ>43qVF=WMTzg@zgFdv)C$R$;3`?;&I4_Rhe)6S36+waLxeHIL8*SA;PB(^P7x`Y7 z>W$ijHV{+o`%Qs$nED{RVrx^N2-6@;T`?`iv`Rb@7=-D5;YeT}rgcqC!88irbrHB) zX!*_);>s~)M&u0zneMTs)^+3*hk1RD;uF(~X5_0mlt=i;^2?5(?LX2stv(U>YE0CA zt@cP@DJDZS!cj*8SLu!fR>dC)6k&oc2%mE#FtqcL0O|@KQ!Yc4@t}Ne#)GfLcAI&A z@O5x8ZtZY);S6F@=sswEsY^jzmT$LO(VXD;((u^a#r%o^y@rkNWr)w6ZFX_BNVNoq zIoBe8*0W80F}AFa-l0_Ae#-R`iOUsrm~)kzj~ghW$UdE*7B^%qq4w4j6 zkxYx89#6k;D4@O7(|wo%x5= zgZ2Lb`-mKxn;RMcWdxOBI9{$ibZCtgjSL_A%jB_$kbYQ3S<4K|Nye8Pp0K5@ZR>@8 z-YvM-yCu*Y>l9-eh>75WFnGR9li&%MhRJY77@Qr}cAA_=Kbc`Lm2qRT$@EQOw5g2! zIC<0LdSqaoZRF38^9tnp$16v4iey@j&`u3IAG2ricSHp@KF&lH(QDr0XWf3l1(Jpqle@_YUX%7n``QjU=_ivI$!*j(hP_X0gI;+4q=@`%*QMNRkc_DemmPl@43F#$MK|1H&vnkX<>%68 zU5@7~8c(BsThk6bD$B^3T<;>sIEEi3k#(peBT*?i;HUcPH6(-iZHE+$g7T$=8Y4$T4R+>E{=CVXGj18HF@?}ho4 z49$TsFRzS8kkNIL+{Tu^Oj%18FsKn>{$JVgmjAZLutj}xKgy2hezaY`ZU3*Vwf|Sv z%F`=r)Bh`L?f;!X@q_#y-~TH+UH|VNNU(+fcbXEE>WBQle^9-J|96_~AIHNhJE8wq zb^`y82HM_AzKZ{5Kau}NyPp=f;Yqt%Uj(NemJ%70?N^KV8|qzYaT@_R(zLMq<0!P? z?Qu~B>d9f7-^=7b2PMn5-{j;Js%35SNC2;X~?3SL( z&H&BRNe^OQ-rXH~e@KSs;dA^C&4CMlI5`ag%k11E!LQ)+wmqlEgRzbBF{epGNmn4> ztB#?ceMCxEHK8qlqXB;aeQe=qU?{#f9L9N$si6^{m>T}ZC#Hr&_{7xk7d|mH9KVbvi7;3DO|_QJ$3dWwA#CEAf40)KT1{91S#Rj|OyF={Z3oB^{QT z*ZydrF$SNQRv_P_Fm=VG!?ctkUQYL`rPLMEZWYqSR4X10WMZ1v4rxT=6H^Vg*@$g6 zB5n}Mr|VJVy}3D%iE=6VLrU-VJ{oul(?gg%n94Bu2O!|Xea_K94yI&G^D#Y-=_gFO=|=;DF-^y0!L$(5vzT^b>WZ|6V#>f&g{kQ* zCF1#2Oq(z*&OI8q71JGGri-tW(h7v1k>6jy=PQ_A$MlAb`w*WSF@1&UZA`V8 zzQc5n>1g0lOuu3pn0GWV6_c(Q70nP5A&cnlphEPF^T5`%+gq4KBL&G z5R-w=S!@oJN$;^)_$+023GkTEc8ODbFM$Oz#i{tbo|Ox*T&5VF#$LhhQNv{RmRNfYk!~ zR)9rvy-wXy0Ip`s1Sn>e0z4vab2=+eFwcu%iNeD)%9JE_+sh^@{xZ zvLP_04R|OUhZ2#bb1psyu*+eR^d2{S(%S;uCUky9fNe6J4#U?7&x&wF==_if>*S`o z_rvGdg{p;GxJz9l{G@?J8WX)}WzFfA0dO;0Bf!hTxe|u%mzA=mAzg~?+Y4asXl&{| z8Kdu;4p1({zb?Rway9*+Vj!KW7vK|NpfrSiv2-e{R6)*i@t_FHRZ{J47dil571?_t zd_rvAp<)|Ect@2YaeN`_7OWE3MiqP^oCol?z&5Gi5%Eny>gJ3GRoIexnQ*5Tp4Tjp znkqm#H?sExxL06dGKop(0WhBBfnCi$3F0f_+9uQlXj32_D6HqD-36Re`0<2XOb{v}v z^G>}?`=RVcn8J!lEJ~NJN2NQPne8eC_PhXZw2{?HIA=z1r!YjZG>h%*b^%^h^s_5I z!v?zjxm=Cr;^Yb|Fp5oqYozz6E13)6kI}=?|Vx z>~MeB)rl|%JF!KH;EQMFiSSZ9VLpgwo<#UAo-Ij)dpi^6<<9JZMA*`qc@yFGa|rXy zIqZ={c<&tcP$K-zF?V!fk0-*)F6^;H*x!XPOS-aG6JbSH_GBXb*_AL==dyPa;r?^k z+llbnxrEttF58p{U!BV~CW5CMVIJ?swkE>rZtTNE_={tF=dsU_&Uvgh5f*h%M9h}% z?8`*h-JR`7ggXU&NkBf&j~c8n)7xFhBNX z>yqG5U$!<0mh~gdWBphys#ibuRuX*GuNz{P4v_Tmb#XWX*RV(RI2(_(hh;bq+tUm} z#7=>g$3i2A?-ALeSXd;_*v~Ob+OZE~;mLOF?O52_t{Y+k#$($lg}LT`GpT2W1~6;R0@$Zw3pwYGv#J z0d5rtTrD@><6=gh#S#G=#3I`3Clq$yQHl)2=M;920JpFW0{8@m{t~)K8^}dE^&93(x zY7To$zzq^YZ^?P*4nzIPXR8HVWu6fLT?7O-oJ!_JGxLF*_+QW~rl#K&*)kOz5m}=O zJSuiTfXyn&DU2b9J1ev``%zFhtQ(tdcJ#lQGgHs2Wxgo#OGM{ zpupYcn`l12E@yQcG62xJJT1~fB5m)E2=JQt|4zl;7Y`zviC*2Z0(ej+e$Mq|hCdM4$0B?s&?f#q@j7XFCbL%+9GbS5f*xbJ zJG6=H^IC4ypA~6Men7-gohIqz#TT>)1$FDqD30)k2#*V09~8-KtrTI465+U-HvIPs z>}LU13hYZBr9k+I61_OBCBi^E^isZu5!jDhBKvrY{}xez1=2nxjZMduLXt)n=^ZY| zcZl$`z!r+|wcHEboK053H~*o`;xEEy0rQHqZQ75WJ#|?cdSQ_f>}wH8c3maHw?dbX zL?ZkyuHDL_8zJvAE79H)@j07q6ktB97T^Ve-73 zX$hAVIts6fShzF5QGsno*F&x`j`r30>}eH_*m9K=3q;Bvs^Bw$Tsl7*1r@wRrQZ|T z?}!%JcPjXU5alY?q=K(yckkQ_`vT;!*J$y7g1aWKg`!>mrDkFW^Bub+!;yQxL9BZxi3ghIQ#Q%0>3uVM9_(I9`*8TJV5$<7qge4r!TAu?}A zSR)c8bRd%P38q#?}v8dlQ@zR|F^I>ACMVeZqi zJ)PhcE&IF^e8DmGTGrGFDs*gLCwNgun2kDicRYNnV^#66IEr%^#a@hux1!ji@$e(Z zG)J)y;^98r3dTcqG-1AuX5Yob!Dv<+50A7X%-VMB?|9hWj@89O6UX4@a9L+~IfgCj z4By8P=8khD$wgZ!a-;-v^|teXj4aNFLqZQplhPRN7v3Zn;W+^o2?RbN^p$L10%i`% z{#7Jh-6*1lB_jNcNISp3=wIan4c%gQ<1ivZ5N6PZLMZ8V;LIpp| z)=xKrg$@FygbZC*v}CW!Th1DBv4C)mn*F7wyz?$B;Yx~Hyj9S@CPI@i1mPdW&QhN{ z2`fICcn(p*yTW$9?0%qvJ)!&+l)sGf*9y2=H;Cl4d?e?Ox}H6&LBH)z4f@#Y#lJPM zT+LqBz?*7Tr=j@b8VxjY_&<3}yhXcoWK!CE!D zPY0i>S(OeJvHpnp1(zfpcs1-B9XzLDuj*hMhkw=m6Cl#jw&D z;xGMrwvT9hNi=>IHuK}(Mh(=d*lH~-RI|lecvMX=^1W0GKX7;%WA|vGff4+)hCQQ& zueCv$Ehl;bhV(XzUu)noHG5nG@2lAd8u&)dUeG`zhmpoh8hDKn{0X|sVx^RHLxc%rXG^n zpERa#i67&dt0ql(L(SgQ&}?`N$DhNMjP&IhM({?Q85-EF&?sbk)X39THS+Ydu!6yF zxQMF3i`+1HQbiqpi^HF(ShE_Aad?HA9aEF@2WM*RGHzy@H5B?RL{a>zV!tw2 zs;0S(9r&A(pzh>?I?Uh*haX|=2!q!`0{)F?d_^>#5>fPrRaEvqH90%4;6&EIW)6Rc z6B*fO1i#2=P&b4oO%*BSews8(RdqVps3y~d)Amjs+|K$V=1-ieI=GJ;s5RVJ?d0$w zK3$&R#%dEcR?ReN?u%k|e9~lH&z_?Rc{kDiPF$#iyVPu}mL#-Bixas&V%9MBl@>l{ z>`yH@7hh{(k%r(0u>~z`=CEHw6Z;CfGz=tT|My#&}R zZ`f~3fQP7kRFm5i;7bB=2f8c)9;ZFVdNsQ%fs_QXxF{u%K>>Ikx1R|#@d18f?EVC} zo0@!C!yZH|fj?>3!wIzO1TqPaCcwJ{exqe862L>6{)~=2kwBYG+>_|oQweZ{!26@v zGYPPoZ2$HswlV>CA+%MCX3r{nXo!DmyurwaQr{md<1lT~}ck%4Y1UN?E zL!H@96jWytRA=^Y6cmB?pTl;cplJWR{T%jP0vsgp&Ms_s0=(J|58c_J1gJQ_JHVRr*{eNZ`}x$j^V!-Sa9ai@GQa=1*8x%cL8Rd64hptn#%&_|Lxe|(ChjpSRB%it z->v%~fGG)2^U@E9@Ffpn9Tmp$+zMe9yDc8_FZiw_1siKR!UpjPp{Wz~+1H8IsUscX zcQyO1BRq@Ks}p>xIsfraP^o=Fg@qbX@jJmwsPmoRhZt7f3GQppHg)C0S;=m zs2*qsf5ouiuARy!2%U&7k$ez0VEp_!L=xK`n#|~&Vx%j zZQV)3FQNnUFqZKDKT7#)_+GMBV2_H@tt{Tx z-a&@(KL3J11wNmXBNJshY*Ps+B@IjMuHLv}G%+3*^*LEy&ugLC=gO^2$8GR;F zTwmktDK1UhUM+p!|mt_RdqY~ zwjJBs4i?6+r7`ey40|yKK8#_tG4NXqI~W6Zwx=s3U$R5m)SVe7f2F z+}o5ebi=!}OW17~JJi@)=s+FQX#M>1&Xk?8ln!9=&C#lpj?!p;Rms1ZJtkhv9#XgAF2WOeM+<{CG^ce1p^`;GnnFO6X>47+#-3#wgG9d&r`7SjJD}HVW)m=n`j_ zZ^hnU;O0_Qw2{Ffb<7{=glc-UkXrPFgh%<&o-`VCEIFg}D*^T@W7(IFT|Sh^N}kP3 zWUTp1`)=m~T+wrW@Fpq0?B1V^fQj-uo&OGF!MoOax*CJScW2n45mgz?#=_LlaK@w{ zd@U=68|3wt$Xt?)#=J`C{;dG-3uM?2DQD*A^#Ldt_zpi~Ma#T{2LY8BZv1)u0p?s( zA(GSlrvS^8!=-W|3Fww_b67C%@~hF46IeB!!uEVy1s^Mym1w&2b5rF*5xPmN4Cqut z>1EjP#9YLC9UQtC=@dL0u48SNr<2~Hp$oy8!+7_Xz8-$9 z#E6ZIU(onifCgdMX7p&p(V?zf+95azW6tkIH_d`~m6a4%g1!SqK+$s-2n@^XOrGT; zVQ@WP|GyXL+GMMlt4~MV?JbTI&nYQdrh>x)Td1Osg#0YRN_qMiNI!03>qI&nd`_fg z`vHE~f|w7KAxj+ysI<#)bmh-E#JnU>*!-ZdL)SueJB(e-^pL zF0F9xq{KHgqriRt)4GG-ww}u;Q~$`S`8m2)Q_ME@kakL>eyV4xdoPScMP&O}3LsCu zIF~t2eMSt&-FvYbHRm3F%_^ zu2VtSc22+_3)@($b15eF4+8fEFMTC&zp`4NV99cR?mL0o zE_D5`!0i$*27Q4tu2{ffisp`LcP-N&)70w~Y=%;}*nB>$h$4nwm1jT*ru=DaqkJxl zI2xb6q3NDVH;LZ#tqgQYYl1$VX|X#yJkE`C9)DrCvXZ^aqH!4N+HZNO6pORa=VOtM zt~ff_#b=>Q`p89x-;*e!5jUEn(; z`-x+GiAWchkk+V-g?2YfBf0pF6V(NbWkSBm+jQF6^mm7kMd>RSH&c>!O591wpu)8~ z9IgBv&ZhJ(cIJ1Sze4L3w#oWGwvYX%BKf(oCn^=B zQ<_S=gw~J|6k_xOyBYE_-x-Fc*B4bca;MmWvF5tsXBPz>;Cqo|?6$TKNg2eeji|qB z>v-^eqS_wqN0C=D`-wFIRAyhF1=OD#?3?0JAMQTMKRr!b+u2adBKK*PZ)r``OvSb% zB(1mDI{9}g8Dm=p-mQJ#`w=g_(}w$+rz7q&Jo#%11ZhhU1+=UQ;y!17fzL$3kUyaf zcUF{MW}cRoAUa+DH}kT86T}@*^iO+Q@_*vRUwJiJ$NiMFQrljHtmH+V(aQ?-sH9yT zr6$x_i6Kxn#|7>;pUL-trcRjb5$${nsFxXgYGb*Rq$+j^NYk-H$iqH%jy#FGKS4Xi zne5V3A@f7;71}olT!At&5)%7-D3NcvT%vf4xf1O&Uy?}8zaY^KKG4^RQjtVE>vHD6 z+Ah&q{6>j8=pxED%1~)L3Z3EGB(xtxM)-5ma-L4C2asq=#pOaK8)EayM-S zX1TfV#CE^8<)*tjeczV*+Lembe@fDCZrZ$WbJOO1y_>wCpp>?ePPn<{ZKXYKuB5G0 z(U#j9q8oWVrBt7d*7gz1WZx|`_ub+$t#RDF#U(oPV$7Agtsz9HmsG>9Wb=OsJ2#QB zQCAjfW4}Eq=1Nhjf#IMGv%mk&lf}A7AP3!Mfn0X)2~s{rl1TLZqI6KAK#JWGozZV$ z{vpuUC8tQNp5s_CN!Q(py?=Uc?Rf|0ii}Vkm)idXG&krx-1DAI4G8$<)7H7>R^V>?;uB9pbq z#cdGCO;|2SpSie3_Wd)n+V?1H`omufQnicwUZ9wl86tfbFu*DH{RP41O7yu_k`}fh zxA`wYzeG&9@b1=EQe+uSKwjpo)>|p62b904}T7Rso?v_Nv1Dz+xVcKu= zH%uV!(>hjxFq$`aka3f*-`vM)iZ_Bz6rPrju(0!Lo?;1Q+-(e}hNpMw-5q(-wLqmQ z4)fU9$l-vY)PZr@RzLD?iEdk#vy;^=%=CeM{{c1dKLjEZ4;=^Gsok<*;qdop*AQdk zq?tinI{9)j7d{SxqMk3j9|U9kuO&fTJ@fZ3m84}sQ>(gnmTQ`M*ov_Z%6zPN;R`T~eg`{9_@Ulqj<$MwL zsLa`eF8+Av($It5rVB9CkFx_JeD2`s*34pG9M^4h=9Wwf*B5907dq9wkD|Vxpm6Uw ztoJa#U!X(Xt3D9uFoXdwr!jIr$$Xkb=CZhLwB+ZS_&aZAkk?%lLgJ#(?int&lNTul z`Gg2tTKYnyK(i{5_V(|H+-`vmly@l;>B>pc4=y^ED`3~+KPNj28j&Vivx}=!?Cwxm zp{ph|vpoB2qp1UVJZ@mOmeWMD1X(W>AI2wCxtpZn}RG0 z*}na2z5`42bi0N_E%M0UD1GUo8H8`lpc5{NO*-P@X0eC^Xu?x2iZa6YbQigt*RUhx zB4x2}cb7y4rMAZn{W}{<>V4);G3@XCv{>$>R1jZqaWB)5A={)KUEv?d4|by^eZGu#bQ66rKTJ>S%!hu*uMFn6 zJhxQr=6TKU5plb87eD^0WwgdX=x+X2eDWHfJE8v)o?prPq}6>PC$oHRl6vzVeLfv{ z_w9e3&GUC1Lpsax{4{pT$GXEiy5 z%jrM=43o6}xc#2_O2st)6&(nI@H0POTnMX$M#sy_>QCVr<<1+-6n_}GKRXYReh~QM zLPw6m5e|#o*Rt*1`*U6%b9af!e5&-AINGg@IjzA^tlK%7>j{$m-+jW;xCbQisX5`} z*xv(f{$}O7iN7XZ`cA}d^q9z&1ChseZ?(v;7wCJ1NVh#|wcUcYYZ^-XR^Q#D-~{am z=Z}1MPNWmfb^KpGQWjk`?A9qE_%6-w?DX9^R{DhQF;#^Vu+07S=QmvamAc|kR`5#4TyIWl85|@SWWiDxP2>+Ff3fSn9 z@y(Pm0}+aaG+>9YROB{^f&3X2RRpmc zg0@PZhjTxKz-rWbsxZez=Z?cYod zrdYq-Q|O@w-vN>CFN~=;{wCTgtmVZ*L2M!7Y5{u%5!?SC1nz4AJLCVb&nD(8W?l_J zHh}QILm%>*j8(k&9WSyIw>rA`D^3^a($PBMB988(;d2*zo{MdkH5v1mjNAEZX{Sy1 z_e6T+;A7^b`jH2(mwnC>Xp^?w$eYA?Z{e^0>%$z~`v5Z-e<#Ln9I^b)ykd(LQ(k3^ zV0?G-H&XD`0182(&D4HgI;fnl{DXa-q0d}_Zk8-D@Yfua^S$Qw0_r^>>~%q`Vs7*k z0y$pUCpI%Lh!ixgF%~eszWlAU=ws(pEr=`#Cr`KxpWg}6zXaNhadhs2&wS!tFVe>Q zEknbn9F*JaIx7Eo>@~ziRMb*l`UlT_!e2(m!}R$pPxpSO8_M2A<&7mL*Cs3$#Ji6j zk$k2s&eiN4hhseLVRgKP0t+V z_vBD`PVbM=nQooa8OR<(#?|s^|E<)4%lQ;} z%|U-r-Jg_}@*;D=Y~ktb=>S!}j(vW|JVa*RQMfQrq5qfn|Y=luv0g+u< zX;#~phRgaBWc2(KWSp$}<1&i=1Q}_6f{gBef{Y{k|G132KS4(FpCBXjPmobvDbJhd z=}^gc%A^1553aEpm4AGV?NNE*YwXE=zBRTdi|#Mu#Ts^9`e#y|^9B0E>X@g5Bdd%h zD&HOK+~oiZJAHxFHPp}=mK8R}n^*{~UjOY=>U)dC^7}~;zu^0Gbd4RKi$rOeC_4~e zVV@gC3I^G3Y_k|&-nWc~x)v_S;(A(;R?*c)ECO$c^tnx>6WKim#^$}gG7sm-zXbJL z$pX5*r82j$Pb}DT1@1*dnJZPkB#wN-^LP<`e~2P2(7E5RPu5>_pIOJZaPNh$r^$NW z?5OivPb2o~*2G+1Jj9Dzi1{QhEfTny!X>PO7TI>tkv&RXqbE?18gdnnuty|*<1bPNj>q>gmvk&roGD58ezA@8Nu;=`4SjEKE4>>je%N+V8~pJ?M`_~~ z;<}E+u&I-@;0p1BP6YaAXKD8p;%}Yldu|tLbELSY%UePCVQZV?o7QY3KWXeYFq+;%(*?yP2?U+~w^9gvIP z5O`y~PL$S5(yK05Ck-y?2T7cRJ_!=@B>FxsNk2+-Ka-=&s`#80MC5`X7PqBJ z^~tT=CF|+CZoGkA)D?lg(}g?+w6A|U7EAiDm`aWmUU zYukthnORKcz5HD4k#ElY#Tkj-k@3GJ0^jXh}KQBlE0^-*Paa#4-0c#7rGB{LluLY3qC4&zNz`Wc`3ZfZF&icEj6_#O7aHUp-l?2{ z#2!XptaaV?wM(4NinBrL>MPkki7sV-rtii4ok}^byOAU3cZnpvC7cz0l*BJ3X<-mW z8J(5HdTMoX1?9Lph{*5L=iwmfiy(R)UssOAoxH>0*g%fV1>aSOo>HREJ)w9I@)Q>+ zC-+@+6uXc1ql?av7D>_uVUAEOiJ#E&IS+qI+*YbbDf@g+62Fkd!xG&WKPH*SLur{@ zrg{8M@kbV*Df{x;KPtT<@J~r^3gT-*f;L&btFPs|Cx}ORelaiB^ZfVpUWeE~ffwR@ zp`Fo}#mWBF4k_RBvqU~mqyULmbunm=)r0K(dqo&h4?M7u=ilUSVYc0Df&Y(sq{XXq z^G^O|a^)SR00#aOQC#ife-g!CMgFWPz2OpJR_vlMV5!O_Zdc3-eTn|pzBSEB_Ld-D zdysu?edvcJCP}MY6!!6&NKTHuBLAU4-|vdjc9%Xf@Be?Ewg0d9)gGico?cfk4dy3{ zwQcx(UV6I?MzVM+h|d$G;$Z%5L97nuzo6gD5NC?w#$ZeeX;mG_=FyGdf%(vAL%wyqy!_9vxh)3Q0Z-TVVEf$F4 zDmVX`D7_HE|00UBL-^$`sm?9#afx$7`2V`3bs;>IUquLCCQ0i<#P6m1@%?FAX@Q%2 zN$=YFe>v|5`Frldcabn%{2>gBQH|^EFm7Flgg-tHxeDJ)LZw;l`3>!)pTqd~$p!X( zyRJw)PA;(Ku;3l+;cE~o+Uw`R|4Ocx?-2Xc3c3@pm_Lmjvfj_Oh2Mxp=Vwu>m-r(t z>4?Pt;$o{y@L9IDTK#O;j&XBc(ySo?<< z_#A({(}}*>`vzY{+=S0%ozXn&I$ws*-;_4_+YOtUo9$@Oh6wKGa8}KZ6286kSi-SR zB0m33t=iP-N__57JZ^2rOV7#=XUc2NRo963i}7q7TS8H#7tyI6eZI;|#XLnSX@*Hj z3D0=0ct*tTWk(>c87`+pIp=s%T*-?|1NP~7e0)!dYZZUaE_R>o3p!Z&H~aieyYsE` zg_iKo;-SzgQINY=I(W z*dfnGfe0n+O1kR**ed(iVy>Qv9^NOcB{ii}OSgD|v~CJy36GL*YsgHnL0an?(uV6*QX;Gr}p6aKEz` zT2+Zff3mz3pF9f2{2U`i6w$pq=m(ANM1Kocg0MxDK4gAFd{>dY8bVf3CcA zpFBG2#O}XPq;vEtk=sP_&Iwn7P%hHXjqMR7e6x3DPB6k87Yo02NiXT-Mf}O~D!2T( z{X21s>{FOT_f-onO#ei0Ie-1ry!pcPPvzzd(?1J0+tu@r>7QPk<#VH(uYQ>An~y8k zw~o+bzal$-U&@rmW`WZ7vhM=|{h*pE<;?3Bu7k=LZ-4%ds~15By)8@^UJ4SAlC`s1 znu^c2f~4K-3<2Mtk|pycBm5F1&2Gcxwvk@YX`)O;)@}Dn#|7~Kf6Z%xw1zTf=hf0b z1qzX8&zAniKAFu`$l?sQs*Vk%VIrBVhxz_AMqlB@e+c3p_VB*z;ge0eu9z2(33P@(SHwW1WnLfx+ZEOd z5R&-VblLkcEP6q z-8hNeWP88O`5(og|4q7!Ptc5dvW4#c%LMhZW80gq9i={`uUwn#i}l$j zawXzzvUNR^c|v!oZ|_{oce_b?n->?zF*fdFEXJl;xl-#Z{j7}vmANCS{#0oS_oTFf z=U!CGb@3ebK=nGNUpFg15-2Bik{LeZxhIGH%#;37IhL_^M?QrbON3w| zDBtb-(9QKhbk?|%S4eU6Ue&$ylPE7Kq~PnNB(C4ZYSq|mxo%gto zjaA>zvaSP1={SKsN|I0OfPALj^DYb{ZiRS7xhNjPvMzE>w1i>j^^5ZB$0aU0q<&v@ z&nx@iLdAZ)>p1w|6x;0;#qUMBTX}pPU9&Gu(msXinaH*LB_k)ZHvx7D;wk=aj%yKa z`>)7Vh{?KkAG(g`B9wmQrw-!yoM66NsLM4E1BB?^@vrcOMsFtqc*4R5hPfCmhV~6p z8ofP;9v2ooQ@AfIa!^=s+`cdurBg8GJn-GBPfyp!~4tW;UMKH=`N*g zL@UO>e9*cmG%8;?*=V43mCF~Ig7Oiz2LIOjG%8y-0JA{5 zPG9y^t?bcAUySq{^y!aiWl!eiGKDEJqwz1Do+JbG3Vwh1Re>i;U!TEReIt>cG~d2G zh$j~5gOT1-NuNV`&J-Ca6rf;a=Th1>Q^7jPT8Q+t0Ax{J%M|RB4sH5CSa`g-O;3Yo zC3q${@H}kd=|%O&;HUx5M1^NI@ysQjIj*>{h?&xTVbQ{num~`QgE170!EyV;T*NyR zyrB!upO^JNcs&cwudIi_GyMYcBi>*%?9L11^?>)63*^lOZ`Hy^?*f0k6YSfl9K4+u zo!=O!2T#(Xz}uC0=sD6C&Vz^QMPAYmmYjdRh&PY+(@QU`O%8*1(~IZVCaxfkJ9?fx zy})zPGChxnc;bCL$tGn(^E(qf1D9#*!WUL$3in z-G+V|^c)+yt1af74ZS<)TWshtpjX<^lR&Svp{Ij>#)h5)dgux(JrDFAE0i@E^brbu z3+OSRM=JD3l(|?5dT-GGZa;rVn%8}j+W?-N6|Jwegze#$vA0;Tk6YIGWMF5nu(yv$ zRu9I&3wMH8otiMNS{hfyN z9HjTRwErYa`!59c>$Q#E2W{IwdYV~ZvHF9j89cr9`H#`^uS0rNVWT&}oPYFFmT?~1 zj^p|Od$$GqqybBMvKO#}fqhrS3cIV6{YMJY8j!}?SCO3o8uv=;pto1#Gy4x4mWWq08^>n-iiM#Q5ocPz zx-ik`1Mps<*6lG?8PZc}NE6mKdha!sTj;NplrXb^>A7B8(|njX9i|wVfvsQ;0h6`f z(nind?Xr4c<^l7bzj|)8)|2|MCmPKCYNI#JC?72=Jfv@XYU5O3?*i7hzoznKDzw{; z{F8i)gjotq%B#+GAlaqBY}?f6y+)Buv}(|*Kzm!z#!M|}qh4?H_Oq$0C#=g#>wiKAN<%$kM@;G;xt8Yj@mQG`- z1nFJhZS?k1(w|mrgKE%kH_@5?2mN8t;~eC1P%=~BRqSk}Pf_G`0lm;fXXhWFSNV~b zjPxH&d`$m=-tN6d?+{f-F#SgjaKCxY&I9()o<{FOMl3DC@p>%le_$Jc9p~JK(ZXPB zA5vYK!F%0a`*SQRNB2&!N0HvgT#o2*mbEJp*vVCm-p3ur!#y@}Bb>K<<#%XUGEj(zGPef;qoBK`R`LO*Tc)kbE zbN+Nmy2Jhtyiv7UTWI49&7j*DQ(u+EH>fYxF+jZ;n15Vai$E} z{trB(>Wp>|wcTmZC)OEl*+|8fr8PA4VvNgUjb8SHvWh;A1a0aud;6AnVv)Y|m~sxm z$@(h=v{#Pl&pBW-k95l!^$qdp^;a&iTY#PKuWiOToPUA$EO^H{w9P{{W4j(aF~^;3 z?8xWM{TB&X4;XoakLzuCGI{!_`j3r&U@E`UY$MxxB-qzu7I;sBcbG#x5>17o{K~-7 z@%u*aOn>=}w&us|U+@n3Uh@x7p9Ry;%zv+~%{tqzk9qGL1MCc72U+G=j^P}O>Xrs< zF|eZ?>SjJCBc43)d<~v#TYVfUj5TRg;;9DDWj{1}pK{1&s7*f2;2HXZwvRT=|L4qm z3O4^Q!I%ZlNQZpxGv$*^^B+9h!1Iy6zAAQG*9w{|HVX*zKS5^Cla1a)OMgvtYuS?k z)A$EpZ}2^4EK9tvZ3o%3Z4V5T4Di%B)cK%|t(OX(h#woh6b7%(88Mgl4GzNO0F(VM zZEce0Rk~sP6arHL%v1**J>2H(xduEzry9L0{H;Y(?dL`~lwKNmJLq&^5Bz7?Dd#oE zgY@A@f51E+BBvSbB;wBkcK#`Czs~IXK6Ax6u8CD~2V}dRWab067PxJq4wpbUu}D;r z@_eiWw#Uzn-bK6xJDoRS>wz86{;c;A^SFt|R1A$b%=7M-a@-VP|7NMzW0rHTM0%P4 zSp7Lmq;k%}>|dnMNBV6RStBgAWFD|n!_TT?)ZFL&P2-L2|G<;q;jA}Y={Fh&wV;J| zJnQ||W~{5@V88v|sLN%rHNg9%k=Hne9-KxLT+>_I|fB1 zgBIwTMRPe3JP{Y2^}emnLF+zTT+Q3=2Uz{VKk|~ZvR+X4C?54}u9(W%?W{LRSO4f~ z*80=hPy_7K-OsA)vo^<{b6gvUFZ2qId;Ze%<74^{d{ZwAtZZ4pF1Y;s%T^4&m67Mq zR|mdVuQ)$G>W?m0qFzz<{XyxykY0A9bAP2G{mq+OAA@AC&jPmU;j=zpUSyhL#}|P9 zS-O!M3WvMb5e@T3BeW*XqF=J@u@2qd(ro_Pjl>;<#1dUFVN?uDwpo0Pne} zfzK(jn+m`aJ?*T&^QmazAzQm?sNFmOvM=A6~-fqeZk+R!gl-|kqjGk~4!FaKfo zXQip&oi$HeXLV;d{mkb*vw%IbP#Y_nEjLDQe#++`z#dt5*1O1|9iOrBJD&j0d#{|e zu}_}2_yEE&*uH-yFx}Z3*na~nDY}!|EE%+KK|5dHJ&S(jNw2 z31E}g8`q`=&@S85x*f#qUu>lB1$K%NtFFx>Z1!iV;8_Nq<^I}Xn*G?x1MiQU0vn?h zSJNGUv)&EP`6LUA?DJ^`@9^TY-Y2YM^g;6&jk*T5cyVCuodRrev2jh!0PV`sv)(Zd z<2J>{z9|4t_KvgO0SXVZyR$XByBz6}@0|6nQtJ-8H=gX?nUb)Sj>%=ym#`;+O{zNU z{m~Blt%jvCN6@eIbZAod07Q!dEjPkQ>kV4(q$Y2OZd@hfKQW-iTG}bo&`zY^a)3<) z*5l7+=*rtFxB)f_j>UgKX4=3e?;Pjx5KHGNcKSW^TG)FRz{}2m!FvY0Lmm1z!Nz9K z0ngE4O@=tfrJ#Kbnp;OJ0<99XE;?EnXw{%eI@%%7c7Z19XmwO4&^qa8XB3(bM{8{` zHZH3`)5l)0^Doc~LD&12BQvx!vsk2;Aia%FehO$spatvXXMmOuni8uS?u*sTRr2+X zA<8okv}K?fY~86^o~1}HHMLRob#k5b<){U1Eoki&S|t9}E9FSk%SK=6=Whfy4CTPI z)s;UAv~8d%wn&#WrTnp=SLpJkK1#V>F5g8;9y5gj`+R%;ETp}Ow83hc9Jb)|0TCt- zm^xtY(Unp56KQ2E119(}t&Lg#gVtwM)0B1@6I6!deCDeVpVWQAS~`ju%-me{BY(4$Or zD$5bjZv_2Xb6H?T>uoB+y3im!1Hh849}Vnvz_xMH*@MFBVujPT`#hQ(S>XQ#{8y>t z>2Y-rybx&(NOOw4-hy=Dar<yZ}!I@AB)`RH*)pK!9>QwG{6pdC}? zc&zqSm3_R%8SqXV-XzC=u>QVRwe`aBpA4jB*pv@)g)~$7s4YF`~ zMh^8y1~A3Lwe?XiR~T#@Cp6CTfv*AnT4&oJR_tJZodG|>v_9!g zhBMcE&|=e_=Rz6M2c$RIp2@QMBYj}Hw)Qdq7ifv;ivIJB=h51ESm@0hH#l8CH<>~S zj#qSjPoxh?H|l5>{{ea$=mYg-$&t%KZJdtu#Ym4f&dW^SjHJ0c513WJ1hNM#1$I5K zK3|7<4vn^nQ8@`7_sAyoo&&4f<67N=k#Wb7n%z1RV>t4eFg4yd3h6hGG_G^({sZW- zpx>#NJ4S!@6R++eGJzd5vZ>WQ1l2Jgpdr9Mt=2K#Fb|)w(G!QjvudQ$e~O$s&|U-W z4*RwmYmNb;{)&i!O*c{-@9ch#Fj2KpSo{kx9Y-~p2wLw^+BjzRA85CZGTOe?phb<+>Q3!l3tF#Ht*-~fAAF09_1W0; z|J`qq^S)9oZyIX=7XOE|KBE-7n#sOjUB^<8b_dcfSKAzWtw&@h1eI%|l0HtK?%Ru{ zYkM)$^M%0XjPkoDNpsrI)PlDPysP~2&amIlbh#CJZ*-G4*>>DSlixkwybdIRCw8>f z-oBWv$M;vUx-A`tv-LE)D$}AH4g*^b?A^w4 zGoMGluxQJ8r!u*2!}!saiN!yGc679|_A6(PgpCIM-=mw<*h!*!K>OEdqpnQ_?f*ub zbnQr48&I9Hk^bvw%lz@s247z%w*CVfnqgcs%0TOwp|puYI|SO9F-BXz4z!pjwLJlq z?F?wwf#y-ib^owv-MK;p2G77JHM>R^Lo!%DaajB>unV8m>rG6rahj|&q;EmG;U32@ zw+x62N%Scd>br%&z6b2{#x_y+(4$ShPO4u8c-)yyvR_T9UkzwknN5b6jc{E|@)@Mh zM!M;qT!MVQq_sVbgGg)&7G|pBAbPlBclQFlAXCu|=(QordXNnIM$k>Mjx=Qw&3k|x zU=L*)_Yo}qAN2pz$$nI!Zvp-0u~vE|=)K3Pd(&v&`FSnq{cZ4PK!3nQXYnssB!-PO zj_pX$hKyDA7o5C4#DJDQR%^eR!Wj2HTJ3b}Ln<&&0b}wz`1*3HIkteEe}ZQzczT(~ z9qmKnjrzI_*n+Xj{NiN(L!j-@l}qCvV&QK9wj9_?bmJxz3)9}Q_Vy2p|3!Kg(&t&^ zV{z2Y3zDA-?3LrRa}CmonV?+)+G>U0p!XklYl=TEL_Yrme$Kci+q;?U{154i$Jy0) zn8ltr32fdtO)r|_wnp2*9R{*xuGR*1JGq56{xu*g9DmMjOQgY;l&Rw{6c&M_7Fx zw0Fq`?`iNF;z3yK#yB-{gUVYB+@T3gYAidO3zM|DP>u966IyRO>fbX8*0=tdbki8S z`%+QpK-W{P%V+U_3f3Cy@t6gh3v74*a#{SVf_=ok+(KU)-&Y-YdVwd&B0t+wme5$t zTVQ>@HAA0IH~JHL0lN!WOKfzcH8wgO*u%gE8gt0vf57u=0PcH>t6QI=wtV zulQ-a)dSo6X-(I#I>yZv6X&=l>*q(8IIMfX>F-5F>+VJMLVD)Ynq9-zib>l1Nk#hn zr!D%{!|okv?lq=oX92qw*e}&G#ari3nf?5!0B^5}P2T&g^?9x;Ug!S-E)BTdc740m zIG-cX=<_G(_n!9gx^_ObWbp2tq;D5rUyQN%?s9;w0oIT2F51p_$IgGjd)H*`9Dg>Q zIcfXa$!0sB@;eQlLEy>sm){`!xVWfzj+-%A+5dC$Sn3U0-emn*p6`x|km|dnLT!=` z+~LWs+a-iu3hb8wV#|T84FJo|KY(5TjHZ*A{v4_4&tNFST}Yp3ktL+*JC52h2G}#% zP5xqUV}&QJ{YHDqEb#W8(&Sz5rw=CDdi;cY?GF2>A1Wbp{uFJ@X)%S94Qt40;BK0# zKYx*ZS@FK}FDQkGX?pt;({;Sg{zH1tY1&zjHm9>Jb2=5+yQcXaYspSyEf2iorWx1v zV$jm2>F1J?YNeC<0Ht zzxp4s)}P9h2;S7^oy)|||A1KmOuVHH##>^d@_~KxdF2cVBW#Fbo0fpS1N0c1GJ53u z7Z$yDLg9Jc-+WzWuV*8nU=QausrRE^d-tNK^eL6OkT1-Rb-` z+H!tNJjLJ{2%g7ncoM*qVq=rnf+uHsli^Mrv;ROZnC@tg=&tv8*o2Oy{_D?i?@ia% zSrgA_w{bkt$!~Z+9f9)Agp7lbvC^Rq^KI%-2%Z~fC^`pqn559lKu?)rJUgIqco_7| z8Akthw9dcH&Od-zI-~Wy8SDQ69JdD8d+qCO4!2_CEd@L~!1KPp@wUOL`)Ix|1@HEm z*h{#4y#1Ly)0Y&T_@qnIbn-l@0NypvI8T`W1N6{&#&hG-pasp-&NrAp;vTGf^R;P4fMB^ukc3%tJxHXi1a$j)yNcVj}1_FH_E* zP?rZ4`a;lSmNgmPw4pIt1bW=E^V5Atz%y={QTMU^59o`RX=hkkzX?Yt5*CT!Ka*HqWKI%1d{@tPMhb-6h1@TAUC-dK7tgA;pt1|i` zh60_d!1`WU2t=iCOd!iV-Y@lfza ztkB{@WIZ}Z9HZ!3cK!uSF!&SbWy-NtIgg(!2o7x)f>Z>~e1<=EK8nc%tXWxd_SwvOulb0N}i zd)aw^x&`S+3bnWr)}E>IIz+nt5Yofe>to_*A57;FPa59LIP(C#W76bZ>u+4ovG*xQ zW58vC*YBMK8>ax<|A4ph)xgfT^A)WA4V^8Z9SV^Dh=SGgp9ZZaK>jWd%2+*rPta-u zVvo>gJoql~KyC})#-HLkf6o98YZ{<<-nNO$38!JHiBKjfN?HilCvyA#G z-gg%w!L&}rqu#W>Wq_{+eA+uT@p?TY47Vs6kNF6bmA?dXLN{r#Bdq;Kss412TaI9i z3mK}=;zN>rhY+m(;O`CoUySW*oWHwlIuI3M@eirse^ZM)rZYVcXuaO_8>13A(WXh` zLms!yh}tV3GABajI%7Ml`%Y6cdqN&HQ4(bzY8~VpdQZ>ld;a8i1_<_A)|iPQYr+4RGk-LU8{0F;Lv%>B&0e=elKw|}_%?l9i-+A_((CPTD3hVvj5bma z&@#3;x4Q@F+1pxgchYHDz~*ez&T&m+WP;lm7?BwAs61+X<~H?RDP)vEhQm9B(=0O~ z)y{ZMFpNc-bDwA2`r z7z0{{jz)D(1Z`qzU~BtCV6y|n76O|SAodWjxdC8l9cut~7O=nB%rg(B{x;Kk(Xk`H%EoJG3)-L)?<7 zkFtPG3II!WD*!fahbgvBNh?FzESogu|3O;WHI3?h0T%y4_??z) z)+G)7VUxzjKhlouG`3+PXeV|$>&OhGpV=9p{|DIoz0Unniu7WKboTxM(#!S+)*syC zm^T4nsqQ_2t=rpVd>i=@#m@4`_F*zGq5GP=ixrIJO(v5nriGJihk4*j-xv7(K`Ku< zc$V(-U!FQ(%J*seHM86y4&~_rh1;XD$>9x>NZU6^lE9N(so91s{t2`s&@6BDMvpSA z1uXsv*xbqhW$S&(^gpmgCjQV7&`$yIv-lTaD+8=oIjvOPcbVKw;ks_gX-i+@0RkwZF*e;5h9 zQe_vjHNw*FF~C*_fTen+0b2{~8ns@Q{bscAtaG~*g1`5HCi9yUM*ioW+ocZt1qbZo z(5Y{^QCP2${*b<1uqV{}t$P4-5}2iy`U*Mv3X|SQ2KG?3qn~t&-5zKb$p=rmRerKw zK4D9M?fF4qI-(ZXXkbHi_T7*4{B?!4ttLoTLx^+!NAs(6Tlt`5F3uoaqYpt)}P+M)(42q0M_+k zU}eYyHu%H9ONJwWVfV50*pLzgGf&jHHy0Gk*fHVfFH0b&b)tq8EZ)xhQ*3NZc| z*!)BK`!DhOy8x+X9ZhF^QJL7c9&Ymfs_@vJ%iL$P4kd=rGcRT;TibFVGxF0WZ;l_C z_OXDnT~bc`pEap()X8hted=K-vwwlf1m-)NcZxk>vBFlO1_ECl9oE0_{sy4U*0)BqE8+&`uPn3$8!m{^dz zLuus#Gs(|ge_rfp_dp9B7s&b#GRl9{;_!4jEybe$NJ;)HFl-sHo&c~k22KDw57+~0 zJ@jYq-NjdUx8j>+E>i>HV!N$SgQ*}fZUmQF0e`L|` zoHctd_wz1*@S>uJOefS-mU{4)w`o@I=c#R)AQy%(5fjk4@JHEyohkHz5~6x{pbwMufbK28Ep zVdrM`Z5vhYJzCpl0aNP-LwV-`)8(ROHMW7Z|6pam=?NL6?mUNusqrJ#;PHT`!aRQE zGiUXHdV(QBj{Ww4I=E?Uhd+(+0XgUF`eCB3;h`f49}E1#uFc*m(TW#)2nGf=|AFs$ zX|wk;{kqbh_0u42+$1t=0kCzKHG5waEZ8=JTa!y|Rt;>*70up(p~n95u!2Ceq2%(I zX$DW$4b9##>l(L4R}}gF(?rO>v2`rmU z;OBKoDQj91fwS$83si!kb#2(@w8w~pOeoa(mH@GCv`oKH* zeU%4OwOs|4+=wdf3riJYE?iJV9U z$A}*yuF~R$n*2{8XQ*0yaSfir=?jNpYsu6|Uyxo4xLSc78A5n#9*#}!Lf$YOoFkIuns;zX*G?V1*%_o6RD|CrN#FP6uw3s7&mu=L^ z@~hymw=Ba3;!v-e_n7ytM&~F>FTnYv`$sG)>ICglh1*3UWk0J69_mUsEc})mNcmvl zl9U{Ga^4i!%$h&9=hYM&7vLM?o21016G#)dH*muwIL;=)Lg7T*6$oh?(9d#1KSigK zYus?y*9}X{Wegs*ZSGyQVf;XxGbJ_5Lbt_}Bj`K_gnI2N-q; zwDT5!*vn$p#i9Nf~e*gOdOI(_C z=P4S6Ak{7iUT>}JOB&+2oY;@bYjq3VjnfBdCHtGmgjt<4sA%Rr){EXLa9+suVrE{-G7 z4?k^3bcDJ%SM2Z{>%3Z%XK16DrJTyj%Bv*L;5d6&l>IlcH;im8m%B?xFx zCu(F=!Xz`-Z3%d5#5JTOgyyRq@C6sKx+q}Pl7?)a;?JHLJqh{(JAo7wlb)UDZ65=- z9iPJ1B`FujkI4lpH(L9Qg3|e1oMU|as1Yaq{%#Oy0q8TeNsZEyWR2+lS*@GiwF8DQatB=MHG1l+5w(nMjfQ%Sp%NTKM!9#R}YdaC=r*=M+ zX9GcsNWIC4jKwpgsB z-e3>XmwJoPUA1Me>>*`Qh)?*#RT&1OdXHBbVYX}5S!ckzdMASMaXU`f+Zff+bE+_Q zDa1?AgqEi)i`|Eacho*$(Z!7JBntRX#6MRiZ~lyL{Im>D$a{{^z4*^es>~U(sCHQ| zT%4fa=jkJ#lb1@D z8gNr+)g0S`D;aM=xf9?ug0dl&_cycb25@KzPB@N}o+3Qa(1kxe2-)hY8EV37r7G{0 zw zGXE_W_OmC;LuSOF#`cyE9ntc=7ldI4?E?B1PUtSuu&-K@8BhObz(DoM;yEq5^k(Bi znYA+=7x!+w9h}B!pe7$RRgbM8JSIl7nTCoo)HZ4y#Z5+d+&uI9gI0NX7^mTQ@KNLa znUo3M40h#@|Kua&KR3%3XZn-40(x7n@m0#=u-rHM)3`x~wqKfaQ#-tTfAGas1OUW7 zh6ih3Vq1{&!+Y37btimr{CAH4zr9J~#idt?2Txoo2Hv*tTFx}c{Mn)&nPb@@`|D-k z-${z$ry7&1Gm_O`*XU|gFTkGiRi=t%uX7ghWPCGlX4~dJ||)y3Gy;cIIK%}=csu6gh{i*U%GpwSEatd?Y|?CfjO%^N5vGnnH{ zk|<>cbcWjToDJ~SkF&f}X4;ZGP7jBZ@_4X!pyd2)^gm1o^di}ka#%cnfEd6%_7R@5 z^NQOcjpevuimXEV>K3X zm{Sg<4^caab31Z*GV>2h14pJs+R{jGCUIj@@3K`fKAi;@yl++XYWZwfXdt<#dd+%dJcEiOfwp@%Nf( z4Ah?l-Zq zx>WKuJFLRDQGBU;*8;<9-*#_yW=3WGYYx*an37sn(Yp8exQUM(T|#dw7gVkrTz=%5 zVl^71!1|%atl<|NR#3*9BCYImsgkLEhw>}+2X}?vG)eNS&8L&#lWlaZiq2Z!B@5FB z%t11hhWNF-)b1R~o^{B{` zro8F-+}>VJkkPf-c@F2V(~dfE>1Ibxhd@_VS^KDZ{}~5ofiyEengH@KsLR*Uh;fMF z?SERp^@h8*H5s<=2<#$m7mnxz-5K9o+W!&qCE4b)4+RTJi!!DAPEg6{>wS>7%;k1! z=#xgk>mjMU&+9ofh|M9%Kc*siO7eTcd0MJ^4%D+g|M;uSKksn+&R#+h)gU!r)J16U zVbGZ_4YPcIzUSSqoJ)g88f=-ZD({^ci1_;%G=XgGux{1nu(2Z6I7=upC zq0!HWnt+gkAa92D>SH62GaV)ls0_O(-qrcg> zRt1XOn_4y5XNP8GP2?Yio$Jt_M8prMXKt0NY&@ipj->@PnIa| zr|qS%6+`VLv!4|mC9TnajxlTI*ye%@P{y<3z{QZO8h`9MR)OK40|#tS#(~Gl`wxjP zvozjVc5P@rybP7qR^Be%5)DHA?!h(OTs^H1jy$!HQ!nfZqtV|hx#SdQVNLQZq7!D($DQJ%&WKT}YxfbmVEPo9sZqlJ0qDlROyglAg2qbmZrD zVby6+qFm7EZoV@K2x^AspE)xlyWfJl>=XdwomM2AnGood1-hZ$Z=nz6kD|D+Io$;x z2oo95SE0R%p?bJij}=Z70-BI5$r)Fstpj@Q-y}v~e8%(bob>vJt4romxd9t1RQJ@f zT2-DkBLrlCmrf-&T{N22=zQ*7Cm1rOZpZblH4L6SB9^ow+-YywtTD7bd^c5fRq2E# z+seLfjEg>6XT0kz2hwP^Z29{>6MY&ufF*Br)}jAXAFx=qY_zNzAf@b%x%)llujs+9 z(U~yEOzgn{+4UOrP-y&HMYfP2p%k>m|SyI z;+VrhWZ@PyPwCgSmY(IZ(|pqImqj^;csIu_EA;@yX*B+Ai~n3ULj2>C?+E`#eE|)D z235z04t?8%us9W@sbMXon4fv^+Q3#3ZZIZW@oUZG`Y#xGyUI9ArrfiljP|JIZ7rN< z05{iRDZei@mfjI|RMU)!*W8b)caw2=Fr+X|`w#V#=Tykzbm+{*u5P8X2vOE5_p4O1 za9M`IqbXD6o<8FHl}BoM97rcn3^M!XFU$h{{I|<~n?Y?gkv1M6t26 zVjT@uSI@bP*th(NY8MDC)=_7>EVUNxTVD*{rAnUZH|3~o{@=)2gy?|HpJNg>edd=qBgC{tRO_`d1yx=Y4hQAXZ z7u}Byp4Er1nJ3zKbh!UL%-+josuroP6#s7eHF(V{msRyARCBX+@|WJ#|C$mirFkO> z&w>CoEPrlpGOiia#5H`sb6phu6smMV33%zY1bRdj(-v@YdDWZzjz6&F!&p6!#MaDRH}ejy<$VU!=p;&MyhzIZiY^O z$pQ5$GhkXzvl~*l=X>K5g0j$U@V)F|t(R3Q+f@#{g%?ODo6Sj-=~P&f`^PW0tT;TK zgL4$AxI0}h?vvfEIX&$fU@3Spw)9a${#(v{!?a}Kcps-Y3FDv->d&rMp?K4M>9@}_ z+HYV+3kC|VFw?ZCS~fprG=ZFgB6_R4h%RkPbO%&F1p_*>9MZ|KQHB~}0nan}aLaHu$=ncSa zm9HQ}gwhtFjP-)%|8Drh`AJscCuU!@{!`hA^TVi^JpazQ_RmcWx3)+EyxyC)RF%(oMURmJj1!N0@h&DNd$Lhl7!Zm*fq z1r`imr0=>Kng}3%aG=T^*r*<4lP!<6mSXD8kxx$slHJcj?Ez9rU%}%Ydf`Jt$R>^r zzYhz85maCKp~KtDru6=)U%E0*202Aa#~sA!YC5g7RD}bYjIOUp(9bX~OqedXgbupV zd0xWjDE8*-R9s}h{m!@y%B3$#x|C9L&dv8Z=cM`7@bwMae6%lD#?0;sQO!;FB>^1X zszu1=7buW|7E%2>KGCbNH`;Tj{~FE;nP@q$sD?(Ie(&Y?N%QQz@9{iBGk~T_D1DP! zvYo|WfYlAEA9%~_mHm)Xh4b3mc;Iz#zOCN3y#~N_$lcqZR}tHPU~$5@=8t(%QC={7G?`S)f^)M?Xy3BXqg47X}z@6u5}>5XiMNj;x20xR90D&avw zKotuAfr}nkS)?P+ zxo5e8`lo|*_psuyix#Ov=|F8@m_4`;lTN$fJ^eo%WLJ$9V20F2KApc zo(`0_f`V_)C{;s>{fjRFInOYON|nK`bji zJnmf?kRG!BnHhVdA6+^KKEfwf1slaudNpvrZKKj5$}m@U3f+ z!erwWfF_iB>u8Kz(jj2z`)hHt8zyld3415QNSlN4w|E#+3lqszozF26uwf~V2zXmt zN7k~a5V{XG5J!44KXKP^+MjbYy+Y-FfJlB&2>Q09#qPj-Z_`WbS2y$jRCNS@-Kp-e z_*6MWZP-2PfQ8gY^j!Q~v|l3-_0AC8z}(^ynQq@=-Q^ajH`g=uYOyQofjb}|<<~v~ zd6MEp@_Ksj)eUr15i?ddUe8QLkI!QD(U>Xoc5F!B^-VWW+hwy|t$}Rb;ddsvN2SbK z5w0g~`e!BNHNu}zSaSTRG7@n)Vael}uJh)hl(1)c@I8n7P5iCuzxUz0r;5xov!=Ow z3OB)4p80r@Noa8BJ>olG;IFA1A4BnjtVjH_mObS&_;Xy@TKWD0Z}a#&XND0;OEKO< zNLM$sM_tHM0G{oWEQi}k(67+mt%J}@unV73nrd1auke7`a>xA=c2z>HlL!G<%hVhT z>Xd%DM=yIY16#eaR(+OXPkEY4SaQ|zZnzQ0Nhn9^5yEZ+OiLsU0^Whsj7OPr5PMde;GiyQIt z(MUH9#r<;)xJo{jvcXZ*5gSvPvNy^*z{@ zLP%n*U#fEG=uV0!EPeP^HJ%jjIJ_QvF>0yx@g2m$u^dY?7{G@jI#}UzZCg7}L=IH^ zO?)y)t;gebsmr02S>I-6u=RhshA-GIyciR2UTVD|G+m;J2%UK`W~W#h_}%yVlmeFq zZL7Q#kcrKmA--g@Ieg_9y5%7)K3JYjH`;C<#DK+XnID#8k0BCQ7 zM}zwI&BH5rLgF%oO!l*}4x|v)cIe`Ig0wQCZb8fTSjJ~3i~oR~3H4|-xY`OM;ODpA z5gssjP)}dy;mLx$v;4D>JsqK30VzJ*r1RKY?>~#XjaR24i7aGWvD7MWCw~w|B%r+Q z&zRKJk+H>Lx4`y58`!6Kq;SI0!&~5z8n&wR<2H#Vv5k3K{??e^<#FWy@(16ty)ThI z5NRw*UUczLfbQ~swibq6YbraE(ZH3Ej*Jrm@VlK>dvtXzg+t-1pz$<;otJ57J3rb5shF6XmNoyVIpgQdW;v5dXGA z+5O^so!n92zoC94x84&p|4`>%^$oG(OkFumz)t^%|B@vN)GE-0Uk}wB3>@o!i17Uz z#>WZV$lvEHl!@j_o8!oBwIq8x*jmk=u)rV0UK z#kbe3n@XmRgz4Jszr0%7J(iPOpKTRDP!Q?G2xzVY_!b@9{!ew$No@s6ILo`yV!7Gz z`v;Dh$_cEhU>*3*f!W4w*G<}hosl$~zUm<;EkD zLQVf2Z?g{6T)!s)ELjWm#{>$~QS&zc)2R4csnKlvMJv?s-*H2=>9GMlwN`G#qhI#+ zNa0tn_2cKcS#L*b=+9b5qylBn$6BY4Wz9d&O{&dxW;-DKeV%*Bo93+S5RzT8HrsZp z5f>q%V*T$JjR7F(O=j+uF$*B+#5km_=s`45bSjE~5e=yeN5z8>%YG_vYRL&vmt zSTZ{A*D(SpE0ve*Rd4p%!6DnLhi~?O_4x%^UOn8!4h~j%<+`7qH}UcLzRph8d!pOx zJ87J3oSE#VtNY}M?h{>IVZJFRhwRK`uU=VJEcRGaQ6Ne^$`3UH+e06&5~znktxLd7 zN-m$1^Ln760CBs4FtwSwYpdaGyuF?<_4-xtv%fa`>oKO~6th~qd+Wk6wc*3W`Ox#nMjfe! zi&^db@CPsE9=}bqyy8_$Q2LcUkZ^W(Bn&4CmQgUyU7JS?I-4IoM6z}jahh4I=Ey;M^e#zZ4)O{^4`XBR4q&FcA3sqod=69T znzU;SOi4=0V>t;tjx9{G+k7FUWfQCoQz3MnMEA68_qH89gcEZlnq6ZlwKoyOnCThR zux(8-O&=CqmF8QS9sEI-do{o9E!>&drMTj~UGUTU+3?IMayR%Xtio1PaW^FObXOZn z>>@4%A7|3u?f1YUHS$JU^-4p{hgz+6^(%qa(<|=!q{vus>E;V|t+c7LC*>zq_8Dpy zj}=U?G&Fixk78fj;*VB7Sxmyy^ke)Q+jP5Oe{OpVPlQQ&S3-`l+`mU?KSe?e$n4S9AA6!AF3458zJ}iveE|5MH@I^4~3j zrYFS)>E*Q7GE|$xME)22++)*&V+l63HLtR@E*QMEUVB`;_pUX&U}YegXbk`9?n|Vx zB`J)-9k*0nE)!*ZiLI8+bm#|nwEp0hlo_0i z3YF_d6wI8|ZJ*lB9cONvWmHrK`IU3SHP0y8(|ZyrULme7@VmtdNw)YnQH!J!8B&4Q z$Fhl9g&i8)FlFXh*kSMW0K0%pPPs(B5BtUCG~@y)*VamUAat^OqlME>8B_J!^)yaO zw?A~jVdTL*`@Wwy5DPIwi2#ayvb1x9Bd`W9;&>?YE|gYGUqajCg{Ft`>x31>00lB3 z`?{^PIKT)8rENXb$u*4-s((uGhY0v>xlSM1ZDjwW$vU8X4>uE&D67oxfD;Aqic45* zoSBC6G(Ng&Ko4Xf@NXZO_I2V5O0Zny@+qtVTW}=6z6R*#nn3)!mH?{ z{H7D<2fWjnCys{~YhoTu`Agde8>WYq-|wkxqn@$#Mczbwsr{@K<;@7`cc3Me2~^Lx zpp4GRoSrbu4&R5|gX7`?-qq0FVcNb_TjYXMm%%+MM8#+kbK=wbA$F*=&h*bqq&OUL z3Z+sDR5lQj$b^Cag(`mmW}=8aueQ;>#a$$+)sxClQ=A3AU*RH=W>*oQ26<7fsXqBU zl**K~jUx0swV1xom8H_<_P*-#;-(p@%Ejn@)jRfv?RF;-Wv;@Z?&2lMV@R#%8o}Lk|NBkmJE7Z)pzc-6o z?7iLEq7-9e!{P_dV^}pgoxP*j4E#Q)Y94|~ycp|RuqdI}9I9MH9cg#RH-LONWYlOA)fi$nXG@v^vzF?9^nrfI8}sj`QZoPlyu& z|G3#={_4mo+4Yfjh`pk%zUXC$owpQAmIeHBY;<*^NiGLA33oufjVQXWaD(S*7N67U zyyF~x23@=jfLPS?EWAPg zZ-5*kVTjpT+aO&TmWgcPTLPpa?^Bg;*d!mXTGoUi->J2gAq$I{yA{UwpQeNY?cZeN zl!7O**Vg~54M)o1t0snqd3UNhBU*=o{wBEYmp4d?onsGc{VlRyq_eFzeBE!#Y zhLdWf_XSF3+V}iQf`1O9r26Nc(4CTSIB87qNWI(iNawXx^iB!GxomRQaQ)z(6}ar- z$gV|;b>pkwImYBm4~(SB1=Ze#^NM&x_tQXVqr0d;4va><|DVmQt_7NvU0B%PCUHxtgD*<8JH>1a+}ZVlns2=tlWV%Yo((UJ4RQ~+FPI<;+* zxlXPsa@JvzYNvoN-x}`yXwz?}jwI~(=WTAIHislC(4WEs-fS$Y#Y5xp$mb$&&N8g8 zU6B$y^jepvgd9H|z{sOS*0825-TKwSiZQO&j@vBD_rRt zy3^3NI4BTY%^Siwz2pN)Tj05p{|T8Pn9^p~MvF?C&}UdJF&oN)jztJ67 zBD%2!Pre(vo~J_U2q)&gBQZu*Xbh!K-g#JjL5LvxsCnpzqW{Zco*Ws#j_)`Y%!et+ zr5UBd6|THQNkX9NK3H)ILTM;X`2>G?%HRG4ScY|W!NU(OL3r!NmyOH+*)ozLYO8B1 z^b)lQvHdm6-e&f9^emut4iLD7_$g=GWM`x@3G}W^aNH6U7=Lzu=C_Wdasd}tx!C;V zr(xr*K2j;py@n+5Peth9dfr@-3(v+sWRAoh|IVlSJJh2p7V4+xf6C=h;$XRkg`^3{ z{16;v@-b8eS1q+?;dB~r3o$j4^P>em_|c}=mm8w3nNqKQCoPNw)c7=?* z&M=)LJg{;WAEHgtnqIhxnLD{jF?FK~*6@-J^8DL*Y?B4F(~y<_j}Jp8Zdx&$~mWux6nRV-7EJl-Gjq@8IE;7AGIH zt!}#A9qNxu_t@3Kw_|ha>}KL~h{Big@*|SF0645ji{_&>BT~UwOY(w4apCCp`u2bu zeM&RYVN)2oQ)>rYz`*8%@zPuoV>m4~$ta6q2m5*sd+;5%XAp;~bLsR$G}9U1a8t>c zA6DKjzTtO0Y0_wUR))LY^VKr z!1aefuKIFD29F=zZ!KE*i@{>Lz0k{eOD&@eh?G3G*nPKI>-=grXtXZ*^;gaBjEOFRfpL!nm*C`!L=5odcg6hlKsyU=c6y zGufEFHU&cBqwa#AG`Ux(s!uP*RfxjG>Sw`z9HGp=IVdo2(Td*Cog@l1C9rt%S`yDA$wxd(_d|4Yffvdv@vgWZoSD| Iwa@m-`-;K}=LS$=Ahy-hKrwn#D_? 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 Ta-uMR{=3h_z_38y&%p3MLDO&# literal 0 HcmV?d00001 diff --git a/ComScoreAnalyticsComponent/proguard-rules.pro b/ComScoreAnalyticsComponent/proguard-rules.pro new file mode 100644 index 0000000..743015c --- /dev/null +++ b/ComScoreAnalyticsComponent/proguard-rules.pro @@ -0,0 +1,19 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/sferris/Library/Android/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} +-keep class com.comscore.** { *; } +-dontwarn com.comscore.** \ No newline at end of file diff --git a/ComScoreAnalyticsComponent/src/main/AndroidManifest.xml b/ComScoreAnalyticsComponent/src/main/AndroidManifest.xml new file mode 100644 index 0000000..b0a36d0 --- /dev/null +++ b/ComScoreAnalyticsComponent/src/main/AndroidManifest.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + diff --git a/ComScoreAnalyticsComponent/src/main/assets/configurations/ComScoreCustomAnalyticsTags.json b/ComScoreAnalyticsComponent/src/main/assets/configurations/ComScoreCustomAnalyticsTags.json new file mode 100644 index 0000000..9eae737 --- /dev/null +++ b/ComScoreAnalyticsComponent/src/main/assets/configurations/ComScoreCustomAnalyticsTags.json @@ -0,0 +1,15 @@ +{ + "ATTRIBUTE_TITLE": "ns_st_pr", + "ATTRIBUTE_PUBLISHER_NAME": "ns_st_pu", + "ATTRIBUTE_SEASON_NUMBER": "ns_st_sn", + "ATTRIBUTE_EPISODE_NUMBER": "ns_st_en", + "ATTRIBUTE_GENRE": "ns_st_ge", + "ATTRIBUTE_AIRDATE": "ns_st_ddt", + "ATTRIBUTE_SEGMENT_NUMBER": "ns_st_pn", + "ATTRIBUTE_NUMBER_OF_SEGMENTS": "ns_st_tp", + "ATTRIBUTE_SUBTITLE": "ns_st_ep", + "ATTRIBUTE_VIDEO_DURATION": "ns_st_cl", + "ATTRIBUTE_VIDEO_ID": "ns_st_ci", + "ATTRIBUTE_AD_ID": "ns_st_ci", + "ATTRIBUTE_ADVERTISEMENT_TYPE": "ns_st_ad" +} \ No newline at end of file diff --git a/ComScoreAnalyticsComponent/src/main/assets/configurations/ComScoreEventTags.json b/ComScoreAnalyticsComponent/src/main/assets/configurations/ComScoreEventTags.json new file mode 100644 index 0000000..aee2fd3 --- /dev/null +++ b/ComScoreAnalyticsComponent/src/main/assets/configurations/ComScoreEventTags.json @@ -0,0 +1,33 @@ +{ + "hidden": [ + "ACTION_PURCHASE_INITIATED", + "ACTION_PURCHASE_COMPLETE", + "ACTION_AUTHENTICATION_REQUESTED", + "ACTION_AUTHENTICATION_SUCCEEDED", + "ACTION_AUTHENTICATION_FAILED", + "ACTION_AUTHORIZATION_REQUESTED", + "ACTION_AUTHORIZATION_SUCCEEDED", + "ACTION_AUTHORIZATION_FAILED", + "ACTION_LOG_OUT_REQUESTED", + "ACTION_LOG_OUT_SUCCEEDED", + "ACTION_LOG_OUT_FAILED", + "ACTION_APP_AUTHENTICATION_STATUS_BROADCAST", + "ACTION_APP_AUTHENTICATION_STATUS_REQUESTED_BY_LAUNCHER" + ], + "view": [ + "ACTION_PLAYBACK_CONTROL_PRE", + "ACTION_PLAYBACK_CONTROL_NEXT", + "ACTION_PLAYBACK_CONTROL_TOGGLE_CC", + "ACTION_PLAYBACK_CONTROL_REWIND", + "ACTION_PLAYBACK_CONTROL_MULTI_ACTION", + "ACTION_REQUEST_FROM_LAUNCHER_TO_PLAY_CONTENT", + "ACTION_RECOMMENDED_CONTENT_CLICKED", + "ACTION_DELETE_RECOMMENDATION_SERVICE_CALLED", + "ACTION_UPDATE_GLOBAL_RECOMMENDATIONS", + "ACTION_DISMISS_RECOMMENDATION_ON_CONTENT_COMPLETE", + "ACTION_REMOVE_EXPIRED_RECOMMENDATIONS", + "ACTION_UPDATE_RELATED_RECOMMENDATIONS", + "ACTION_SEARCH", + "ACTION_ERROR" + ] +} \ No newline at end of file diff --git a/ComScoreAnalyticsComponent/src/main/java/com/amazon/analytics/comscore/ComScoreAnalytics.java b/ComScoreAnalyticsComponent/src/main/java/com/amazon/analytics/comscore/ComScoreAnalytics.java new file mode 100644 index 0000000..a4bc4b5 --- /dev/null +++ b/ComScoreAnalyticsComponent/src/main/java/com/amazon/analytics/comscore/ComScoreAnalytics.java @@ -0,0 +1,499 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.analytics.comscore; + +import android.app.Activity; +import android.content.Context; +import android.util.Log; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import com.amazon.analytics.AnalyticsTags; +import com.amazon.analytics.CustomAnalyticsTags; +import com.amazon.android.utils.FileHelper; +import com.amazon.android.utils.MapHelper; +import com.amazon.utils.security.ResourceObfuscator; +import com.amazon.analytics.IAnalytics; + +import com.comscore.PublisherConfiguration; +import com.comscore.Analytics; +import com.comscore.UsagePropertiesAutoUpdateMode; +import com.comscore.streaming.StreamingAnalytics; + +/** + * An analytics implementation using the comScore framework. + */ +public class ComScoreAnalytics implements IAnalytics { + + /** + * Debug tag. + */ + private static final String TAG = ComScoreAnalytics.class.getSimpleName(); + + /** + * Name used for implementation creator registration to Module Manager. + */ + static final String IMPL_CREATOR_NAME = ComScoreAnalytics.class.getSimpleName(); + + /** + * String used for adding Action in ComScore hidden and screen view events + */ + private static final String ACTION = "ACTION"; + + /** + * String used for tracking hidden events parsed from json event tags file + */ + private static final String HIDDEN = "hidden"; + + /** + * String used for tracking screen view events parsed from json event tags file + */ + private static final String VIEW = "view"; + + /** + * ComScore analytics object + */ + private StreamingAnalytics mStreamingAnalytics; + + /** + * Metadata for the current content and ads + */ + private HashMap mCurrentContentMetadata; + private HashMap mCurrentAdMetadata; + + /** + * HashSets for custom event tags received from parsing custom events json file + */ + private Set mHiddenEventSet; + private Set mViewEventSet; + + // Is the playback screen the current screen? + private boolean mOnPlaybackScreen = false; + + private CustomAnalyticsTags mCustomTags = new CustomAnalyticsTags(); + + /** + * HashMap containing string as keys and HashSets of custom event tags as values + */ + private HashMap> mCustomEventTags = new HashMap<>(); + + /** + * Initialize the custom event map from the given file. + * + * @param context Context. + * @param fileNameId File name ID of the file that contains the custom tag mapping. + */ + private void initEventTags(Context context, int fileNameId) { + + // Read the file only if it exists. + if (FileHelper.doesFileExist(context, context.getResources().getString(fileNameId))) { + mCustomEventTags = MapHelper.loadArrayMappingFromJsonFile(context, fileNameId); + if (mCustomEventTags != null) { + mHiddenEventSet = mCustomEventTags.get(HIDDEN); + mViewEventSet = mCustomEventTags.get(VIEW); + } + Log.d(TAG, "Custom event tags initialized"); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void configure(Context context) { + + try { + // Setup comScore object + String id = getClientId(context); + String secret = getPublisherSecret(context); + PublisherConfiguration myPublisherConfig = new PublisherConfiguration.Builder() + .publisherId(getClientId(context)) + .publisherSecret(getPublisherSecret(context)) + .usagePropertiesAutoUpdateMode(UsagePropertiesAutoUpdateMode.FOREGROUND_ONLY) + .build(); + Analytics.getConfiguration().addClient(myPublisherConfig); + Analytics.start(context); + + } + catch (Exception e) { + Log.e(TAG, "Configuration failed", e); + return; + } + + // Setup StreamingAnalytics object + mStreamingAnalytics = new StreamingAnalytics(); + + mCustomTags.init(context, R.string.comscore_analytics_custom_tags); + initEventTags(context, R.string.comscore_analytics_event_tags); + + Log.d(TAG, "Configuration complete"); + } + + /** + * Unobfuscate the ComScore client id. + * + * @param context Context. + * @return The unobfuscated ComScore client id. + */ + private String getClientId(Context context) throws Exception { + + return ResourceObfuscator.unobfuscate(context.getString(R.string.encrypted_comscore_client_id), + getRandomStringsForKey(context), + getRandomStringsForIv(context)); + } + + /** + * Unobfuscate the ComScore publisher secret. + * + * @param context Context. + * @return The unobfuscated Comscore publisher secret. + */ + private String getPublisherSecret(Context context) throws Exception { + + return ResourceObfuscator.unobfuscate(context.getString(R.string.encrypted_comscore_publisher_secret), + getRandomStringsForKey(context), + getRandomStringsForIv(context)); + } + + /** + * Get a list of "random" strings for key. + * + * @param context Context to access resources. + * @return List of strings. + */ + private static String[] getRandomStringsForKey(Context context) { + + return new String[]{ + context.getString(R.string.comscore_key_1), + context.getString(R.string.comscore_key_2), + context.getString(R.string.comscore_key_3) + }; + } + + /** + * Get random strings for use with initialization vector. + * + * @param context Context to access resources. + * @return List of strings. + */ + private static String[] getRandomStringsForIv(Context context) { + + return new String[]{ + context.getString(R.string.comscore_key_4), + context.getString(R.string.comscore_key_5), + context.getString(R.string.comscore_key_6) + }; + } + + /** + * {@inheritDoc} + */ + @Override + public void collectLifeCycleData(Activity activity, boolean active) { + + String activityName = activity.getClass().getName(); + if (active) { + Log.d(TAG, "Collecting lifecycle data for " + activityName); + Analytics.notifyEnterForeground(); + } + else { + Log.d(TAG, "Ending lifecycle data collection for " + activityName); + Analytics.notifyExitForeground(); + } + } + + /** + * Check for hidden event (Fire app builder track these events internally with name action, + * While ComScore treat them as hidden / screen view events) + * + * @param event current event happened in system which need to be provided to analytics module. + * @return boolean response whether the current event is a hidden event + */ + private boolean isHiddenEvent(String event) { + + return (mHiddenEventSet != null && mHiddenEventSet.contains(event)); + } + + /** + * Check for screen view event (Fire app builder track these events internally with name action, + * While ComScore treat them as hidden / screen view events) + * + * @param event current event happened in system which need to be provided to analytics module. + * @return boolean response whether the current event is a screen view event + */ + private boolean isScreenViewEvent(String event) { + + return (mViewEventSet != null && mViewEventSet.contains(event)); + } + + /** + * {@inheritDoc} + */ + @Override + public void trackAction(HashMap data) { + + String action = (String) data.get(AnalyticsTags.ACTION_NAME); + Log.d(TAG, "Tracking Action: " + action); + + @SuppressWarnings("unchecked") + HashMap attributes = + (HashMap) data.get(AnalyticsTags.ATTRIBUTES); + + if (attributes == null) { + Log.d(TAG, "Action has no attribute/value pairs"); + return; + } + // Log action attributes + Log.d(TAG, "Action has the following attributes: " + attributes.toString()); + + if (action.equals(AnalyticsTags.ACTION_PLAYBACK_STARTED)) { + trackPlaybackStarted(attributes); + return; + } + if (action.equals(AnalyticsTags.ACTION_AD_START)) { + trackAdStarted(attributes); + return; + } + if (action.equals(AnalyticsTags.ACTION_AD_COMPLETE)) { + trackAdFinished(attributes); + return; + } + if (action.equals(AnalyticsTags.ACTION_PLAYBACK_CONTROL_PAUSE)) { + trackPlaybackPaused(attributes); + return; + } + if (action.equals(AnalyticsTags.ACTION_PLAYBACK_CONTROL_PLAY)) { + trackPlaybackResumed(attributes); + return; + } + if (action.equals(AnalyticsTags.ACTION_PLAYBACK_BUFFER_START)) { + trackBufferingStarted(attributes); + return; + } + if (action.equals(AnalyticsTags.ACTION_PLAYBACK_BUFFER_END)) { + trackBufferingEnded(attributes); + return; + } + if (action.equals(AnalyticsTags.ACTION_PLAYBACK_CONTROL_FF) || + action.equals(AnalyticsTags.ACTION_PLAYBACK_CONTROL_REWIND)) { + trackSeekStarted(attributes); + return; + } + if (action.equals(AnalyticsTags.ACTION_PLAYBACK_FINISHED)) { + trackPlaybackFinished(attributes); + return; + } + if (isHiddenEvent(action)) { + attributes.put(ACTION, action); + trackHiddenEvents(attributes); + return; + } + if (isScreenViewEvent(action)) { + attributes.put(ACTION, action); + trackScreenViewEvents(attributes); + return; + } + } + + /** + * Tell ComScore that a hidden event has occurred. + * Any event that is not considered to be a app start event or screen view event + * + * @param attributes Attributes of the hidden event. + */ + private void trackHiddenEvents(HashMap attributes) { + + HashMap hiddenEventData = convertMapToStrings(attributes); + Analytics.notifyHiddenEvent(hiddenEventData); + } + + /** + * Tell ComScore that a view event has occurred. + * A screen view event indicates that application screen has changed substantially (50% or more) + * + * @param attributes Attributes of the screen view event. + */ + private void trackScreenViewEvents(HashMap attributes) { + + HashMap viewEventData = convertMapToStrings(attributes); + Analytics.notifyViewEvent(viewEventData); + } + + /** + * Tell ComScore that new content started playing. + * + * @param attributes Attributes of the new content. + */ + private void trackPlaybackStarted(HashMap attributes) { + + mCurrentContentMetadata = convertMapToStrings(attributes); + mStreamingAnalytics.createPlaybackSession(); + mStreamingAnalytics.getPlaybackSession().setAsset(mCustomTags.getCustomTags + (mCurrentContentMetadata, false)); + mStreamingAnalytics.notifyPlay(getCurrentPosition(attributes)); + } + + /** + * Tell ComScore that an ad started playing. + * + * @param attributes Attributes for the ad. + */ + private void trackAdStarted(HashMap attributes) { + + mCurrentAdMetadata = convertMapToStrings(attributes); + mStreamingAnalytics.getPlaybackSession().setAsset(mCustomTags.getCustomTags + (mCurrentAdMetadata, false)); + mStreamingAnalytics.notifyPlay(0); + } + + /** + * Tell ComScore that an ad finished playing. + * + * @param attributes Attributes for the ad. + */ + private void trackAdFinished(HashMap attributes) { + + mCurrentAdMetadata = convertMapToStrings(attributes); + mStreamingAnalytics.getPlaybackSession().setAsset(mCustomTags.getCustomTags + (mCurrentAdMetadata, false)); + mStreamingAnalytics.notifyEnd(getCurrentPosition(attributes)); + } + + /** + * Tell ComScore that playback was paused. + * + * @param attributes Attributes for the content that was paused. + */ + private void trackPlaybackPaused(HashMap attributes) { + + mStreamingAnalytics.notifyPause(getCurrentPosition(attributes)); + } + + /** + * Tell ComScore that playback was resumed. + * + * @param attributes Attributes for the content that was resumed. + */ + private void trackPlaybackResumed(HashMap attributes) { + + mStreamingAnalytics.notifyPlay(getCurrentPosition(attributes)); + } + + /** + * Tell ComScore that a buffer event started during playback. + * + * @param attributes Attributes for the content that was playing when the buffer event started. + */ + private void trackBufferingStarted(HashMap attributes) { + + mStreamingAnalytics.notifyBufferStart(getCurrentPosition(attributes)); + } + + /** + * Tell ComScore that a buffer event ended. + * + * @param attributes Attributes for the content that was playing when the buffer event started. + */ + private void trackBufferingEnded(HashMap attributes) { + + mStreamingAnalytics.notifyBufferStop(getCurrentPosition(attributes)); + } + + /** + * Tell ComScore that a seek event started during playback. + * + * @param attributes Attributes for the content that was playing when the seek event started. + */ + private void trackSeekStarted(HashMap attributes) { + + mStreamingAnalytics.notifySeekStart(getCurrentPosition(attributes)); + } + + /** + * Tell ComScore that playback finished for the current content. + */ + private void trackPlaybackFinished(HashMap attributes) { + + mCurrentContentMetadata = null; + mCurrentAdMetadata = null; + mStreamingAnalytics.notifyEnd(getCurrentPosition(attributes)); + } + + /** + * Get the current position attribute. + * + * @param attributes Attributes for the current content. + * @return The current position attribute, or 0 if it is not defined. + */ + private long getCurrentPosition(HashMap attributes) { + + if (attributes.containsKey(AnalyticsTags.ATTRIBUTE_VIDEO_CURRENT_POSITION)) { + return Long.parseLong( + String.valueOf(attributes.get(AnalyticsTags.ATTRIBUTE_VIDEO_CURRENT_POSITION))); + } + return 0; + } + + /** + * Convert the given attributes map types from to + * + * @param attributes Original attributes map to convert. + * @return The original attributes map converted to types + */ + private HashMap convertMapToStrings(HashMap attributes) { + + HashMap result = new HashMap<>(); + for (Map.Entry entry : attributes.entrySet()) { + result.put(entry.getKey(), String.valueOf(entry.getValue())); + } + return result; + } + + /** + * {@inheritDoc} + */ + @Override + public void trackState(String screen) { + + Log.d(TAG, "Tracking screen " + screen); + // User experience started + if (screen.equals(AnalyticsTags.SCREEN_PLAYBACK)) { + mOnPlaybackScreen = true; + Analytics.notifyUxActive(); + return; + } + // User experience stopped + if (!screen.equals(AnalyticsTags.SCREEN_PLAYBACK) && mOnPlaybackScreen) { + mOnPlaybackScreen = false; + Analytics.notifyUxInactive(); + return; + } + } + + /** + * {@inheritDoc} + */ + @Override + public void trackCaughtError(String errorMessage, Throwable t) { + + Log.e(TAG, errorMessage, t); + if(mStreamingAnalytics != null) { + mStreamingAnalytics.notifyEnd(0); + } + } +} diff --git a/ComScoreAnalyticsComponent/src/main/java/com/amazon/analytics/comscore/ComScoreAnalyticsImplCreator.java b/ComScoreAnalyticsComponent/src/main/java/com/amazon/analytics/comscore/ComScoreAnalyticsImplCreator.java new file mode 100644 index 0000000..57f16e6 --- /dev/null +++ b/ComScoreAnalyticsComponent/src/main/java/com/amazon/analytics/comscore/ComScoreAnalyticsImplCreator.java @@ -0,0 +1,36 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.analytics.comscore; + + +import com.amazon.android.module.IImplCreator; + +import com.amazon.analytics.IAnalytics; + +/** + * This lets modules follow the same protocol for creating an instance of the ComScore + * Analytics module. + */ +public class ComScoreAnalyticsImplCreator implements IImplCreator { + + /** + * {@inheritDoc} + */ + @Override + public IAnalytics createImpl() { + + return new ComScoreAnalytics(); + } +} diff --git a/ComScoreAnalyticsComponent/src/main/res/values/custom.xml b/ComScoreAnalyticsComponent/src/main/res/values/custom.xml new file mode 100644 index 0000000..e8319ca --- /dev/null +++ b/ComScoreAnalyticsComponent/src/main/res/values/custom.xml @@ -0,0 +1,33 @@ + + + + + + encrypted_comscore_client_id + + + encrypted_comscore_publisher_secret + + + comscore_key_1 + comscore_key_2 + comscore_key_3 + comscore_key_4 + comscore_key_5 + comscore_key_6 + + diff --git a/ComScoreAnalyticsComponent/src/main/res/values/values.xml b/ComScoreAnalyticsComponent/src/main/res/values/values.xml new file mode 100644 index 0000000..a05d09d --- /dev/null +++ b/ComScoreAnalyticsComponent/src/main/res/values/values.xml @@ -0,0 +1,24 @@ + + + + + + configurations/ComScoreCustomAnalyticsTags.json + + + configurations/ComScoreEventTags.json + + diff --git a/ComponentTestFramework/EmptyAndroidApp/settings.gradle b/ComponentTestFramework/EmptyAndroidApp/settings.gradle index 33c2e55..cd84c3a 100644 --- a/ComponentTestFramework/EmptyAndroidApp/settings.gradle +++ b/ComponentTestFramework/EmptyAndroidApp/settings.gradle @@ -34,13 +34,17 @@ include ':app', ':AmazonInAppPurchaseComponent', ':AMZNMediaPlayerComponent', ':UAMP', + ':BrightCoveMediaPlayerComponent', ':ContentBrowser', ':CrashlyticsComponent', ':FlurryAnalyticsComponent', ':FreeWheelAdsComponent', ':GoogleAnalyticsComponent', + ':ImageViewerComponent', ':VastAdsComponent', ':TVUIComponent', + ':comscore', + ':ComScoreAnalyticsComponent', ':Application' project(':Utils').projectDir = new File(rootProject.projectDir, "../../Utils") @@ -63,12 +67,16 @@ project(':AdobepassAuthComponent').projectDir = new File(rootProject.projectDir, project(':AmazonInAppPurchaseComponent').projectDir = new File(rootProject.projectDir, "../../AmazonInAppPurchaseComponent") project(':AMZNMediaPlayerComponent').projectDir = new File(rootProject.projectDir, "../../AMZNMediaPlayerComponent") project(':UAMP').projectDir = new File(rootProject.projectDir, "../../UAMP") +project(':BrightCoveMediaPlayerComponent').projectDir = new File(rootProject.projectDir, "../../BrightCoveMediaPlayerComponent") project(':ContentBrowser').projectDir = new File(rootProject.projectDir, "../../ContentBrowser") project(':CrashlyticsComponent').projectDir = new File(rootProject.projectDir, "../../CrashlyticsComponent") project(':FlurryAnalyticsComponent').projectDir = new File(rootProject.projectDir, "../../FlurryAnalyticsComponent") project(':FreeWheelAdsComponent').projectDir = new File(rootProject.projectDir, "../../FreeWheelAdsComponent") project(':GoogleAnalyticsComponent').projectDir = new File(rootProject.projectDir, "../../GoogleAnalyticsComponent") +project(':ImageViewerComponent').projectDir = new File(rootProject.projectDir, "../../ImageViewerComponent") project(':VastAdsComponent').projectDir = new File(rootProject.projectDir, "../../VastAdsComponent") project(':Application').projectDir = new File(rootProject.projectDir, "../../Application/app") project(':TVUIComponent').projectDir = new File(rootProject.projectDir, "../../TVUIComponent/lib") +project(':ComScoreAnalyticsComponent').projectDir = new File(rootProject.projectDir, "../../ComScoreAnalyticsComponent") +project(':comscore').projectDir = new File(rootProject.projectDir, '../../ComScoreAnalyticsComponent/libs/comscore') diff --git a/ComponentTestFramework/config.json b/ComponentTestFramework/config.json index 59a8f04..bba4847 100644 --- a/ComponentTestFramework/config.json +++ b/ComponentTestFramework/config.json @@ -89,6 +89,10 @@ "componentName": "ContentBrowser", "dir": "../ContentBrowser" }, + { + "componentName": "ImageViewerComponent", + "dir": "../ImageViewerComponent" + }, { "componentName": "AmazonInAppPurchaseComponent", "dir": "../AmazonInAppPurchaseComponent" @@ -96,5 +100,13 @@ { "componentName": "FlurryAnalyticsComponent", "dir": "../FlurryAnalyticsComponent" + }, + { + "componentName": "BrightCoveMediaPlayerComponent", + "dir": "../BrightCoveMediaPlayerComponent" + }, + { + "componentName": "ComScoreAnalyticsComponent", + "dir": "../ComScoreAnalyticsComponent" } ] diff --git a/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/ContentBrowser.java b/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/ContentBrowser.java index 22dadc7..1638d13 100644 --- a/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/ContentBrowser.java +++ b/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/ContentBrowser.java @@ -477,6 +477,19 @@ public interface IScreenSwitchListener { void onScreenSwitch(Bundle extra); } + /** + * Screen switch Error listener interface. + */ + public interface IScreenSwitchErrorHandler { + + /** + * Authentication error callback. + * + * @param iScreenSwitchListener Screen switch listener interface implementation. + */ + void onErrorHandler(IScreenSwitchListener iScreenSwitchListener); + } + /** * Constructor. * @@ -833,6 +846,17 @@ public boolean isUseCategoryAsDefaultRelatedContent() { return mNavigator.getNavigatorModel().getConfig().useCategoryAsDefaultRelatedContent; } + /** + * Get the flag for enabling CEA-608 closed captions + * + * @return True if CEA-608 closed captions should be enabled and set as priority; + * false otherwise + */ + public boolean isEnableCEA608() { + + return mNavigator.getNavigatorModel().getConfig().enableCEA608; + } + /** * Get powered by logo url by name. * @@ -1256,14 +1280,50 @@ public void handleOnActivityResult(Activity activity, int requestCode, int resul } } + /** + * show authentication Error Dialog + * + * @param iScreenSwitchListener Screen switch listener. + */ + public void showAuthenticationErrorDialog(IScreenSwitchListener iScreenSwitchListener) { + + AlertDialogFragment.createAndShowAlertDialogFragment( + mNavigator.getActiveActivity(), + mAppContext.getString(R.string.optional_login_dialog_title), + mAppContext.getString(R.string.optional_login_dialog_message), + mAppContext.getString(R.string.now), + mAppContext.getString(R.string.later), + new AlertDialogFragment.IAlertDialogListener() { + + @Override + public void onDialogPositiveButton( + AlertDialogFragment alertDialogFragment) { + + mAuthHelper.handleAuthChain( + iScreenSwitchListener::onScreenSwitch); + } + + @Override + public void onDialogNegativeButton + (AlertDialogFragment alertDialogFragment) { + + Preferences.setBoolean( + AuthHelper.LOGIN_LATER_PREFERENCES_KEY, true); + iScreenSwitchListener.onScreenSwitch(null); + } + }); + } + /** * Verify screen switch. * * @param screenName Screen name * @param iScreenSwitchListener Screen switch listener. + * @param iScreenSwitchErrorHandler Screen switch error handler */ public void verifyScreenSwitch(String screenName, - IScreenSwitchListener iScreenSwitchListener) { + IScreenSwitchListener iScreenSwitchListener, + IScreenSwitchErrorHandler iScreenSwitchErrorHandler) { UINode uiNode = (UINode) mNavigator.getNodeObjectByScreenName(screenName); Log.d(TAG, "VerifyScreenSwitch called in:" + screenName); @@ -1281,34 +1341,10 @@ public void verifyScreenSwitch(String screenName, mAuthHelper.isAuthenticated().subscribe(extras -> { if (extras.getBoolean(AuthHelper.RESULT)) { mAuthHelper.handleAuthChain( - iScreenSwitchListener::onScreenSwitch); + iScreenSwitchListener::onScreenSwitch, extras); } else { - AlertDialogFragment.createAndShowAlertDialogFragment( - mNavigator.getActiveActivity(), - mAppContext.getString(R.string.optional_login_dialog_title), - mAppContext.getString(R.string.optional_login_dialog_message), - mAppContext.getString(R.string.now), - mAppContext.getString(R.string.later), - new AlertDialogFragment.IAlertDialogListener() { - - @Override - public void onDialogPositiveButton( - AlertDialogFragment alertDialogFragment) { - - mAuthHelper.handleAuthChain( - iScreenSwitchListener::onScreenSwitch); - } - - @Override - public void onDialogNegativeButton - (AlertDialogFragment alertDialogFragment) { - - Preferences.setBoolean( - AuthHelper.LOGIN_LATER_PREFERENCES_KEY, true); - iScreenSwitchListener.onScreenSwitch(null); - } - }); + iScreenSwitchErrorHandler.onErrorHandler(iScreenSwitchListener); } }); } @@ -1342,7 +1378,8 @@ public void switchToScreen(String screenName, Navigator.ActivitySwitchListener activitySwitchListener) { verifyScreenSwitch(screenName, extra -> - mNavigator.startActivity(screenName, activitySwitchListener) + mNavigator.startActivity(screenName, activitySwitchListener), + errorExtra -> showAuthenticationErrorDialog(errorExtra) ); } @@ -1355,7 +1392,8 @@ public void switchToScreen(String screenName, Navigator.ActivitySwitchListener public void switchToScreen(String screenName, Bundle bundle) { verifyScreenSwitch(screenName, extra -> - mNavigator.startActivity(screenName, bundle) + mNavigator.startActivity(screenName, bundle), + errorExtra -> showAuthenticationErrorDialog(errorExtra) ); } diff --git a/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/helper/AnalyticsHelper.java b/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/helper/AnalyticsHelper.java index ee4072d..3c6b324 100644 --- a/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/helper/AnalyticsHelper.java +++ b/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/helper/AnalyticsHelper.java @@ -15,6 +15,7 @@ package com.amazon.android.contentbrowser.helper; +import com.amazon.ads.AdMetaData; import com.amazon.analytics.ExtraContentAttributes; import com.amazon.analytics.IAnalytics; import com.amazon.android.contentbrowser.ContentBrowser; @@ -63,6 +64,13 @@ private static Map getBasicAnalyticsAttributesForContent(Content HashMap analyticsAttributes = new HashMap<>(); + // If the app is launched from a playback request from launcher the content here may be null + // because content browser has no selected content yet. + if (content == null) { + Log.e(TAG, "Content is null when trying to get basic analytics attributes."); + return analyticsAttributes; + } + // Set up the movie attributes. analyticsAttributes.put(AnalyticsTags.ATTRIBUTE_TITLE, content.getTitle()); @@ -248,6 +256,123 @@ public static void trackPurchaseResult(String sku, boolean purchaseResult) { sendAnalytics(AnalyticsTags.ACTION_PURCHASE_COMPLETE, attributes); } + /** + * Tracks Authentication Request. + * + */ + public static void trackAuthenticationRequest() { + + Map attributes = new HashMap<>(); + attributes.put(AnalyticsTags.ATTRIBUTE_AUTHENTICATION_SUBMITTED, 1); + + sendAnalytics(AnalyticsTags.ACTION_AUTHENTICATION_REQUESTED, attributes); + } + + /** + * Tracks Authentication Successes. + * + */ + public static void trackAuthenticationResultSuccess() { + + Map attributes = new HashMap<>(); + attributes.put(AnalyticsTags.ATTRIBUTE_AUTHENTICATION_SUCCESS, 1); + + sendAnalytics(AnalyticsTags.ACTION_AUTHENTICATION_SUCCEEDED, attributes); + } + + /** + * Tracks Authentication Failures. + * + * @param failureReason Failure Reason Registration/Network/Authentication/Authorization + */ + public static void trackAuthenticationResultFailure(String failureReason) { + + Map attributes = new HashMap<>(); + attributes.put(AnalyticsTags.ATTRIBUTE_AUTHENTICATION_FAILURE, 1); + attributes.put(AnalyticsTags.ATTRIBUTE_AUTHENTICATION_FAILURE_REASON, failureReason); + + sendAnalytics(AnalyticsTags.ACTION_AUTHENTICATION_FAILED, attributes); + } + + /** + * Tracks Authorization Requests. + * + * @param content selected content + */ + public static void trackAuthorizationRequest(Content content) { + + Map attributes = getBasicAnalyticsAttributesForContent(content); + attributes.put(AnalyticsTags.ATTRIBUTE_AUTHORIZATION_SUBMITTED, 1); + + sendAnalytics(AnalyticsTags.ACTION_AUTHORIZATION_REQUESTED, attributes); + } + + /** + * Tracks Authorization Successes. + * + * @param content selected content + */ + public static void trackAuthorizationResultSuccess(Content content) { + + Map attributes = getBasicAnalyticsAttributesForContent(content); + attributes.put(AnalyticsTags.ATTRIBUTE_AUTHORIZATION_SUCCESS, 1); + + sendAnalytics(AnalyticsTags.ACTION_AUTHORIZATION_SUCCEEDED, attributes); + } + + /** + * Tracks Authorization Failures. + * + * @param content selected content + * @param failureReason Failure Reason Action/Bad Request/Internal/Network/Unknown + */ + public static void trackAuthorizationResultFailure(Content content, String failureReason) { + + Map attributes = getBasicAnalyticsAttributesForContent(content); + attributes.put(AnalyticsTags.ATTRIBUTE_AUTHORIZATION_FAILURE, 1); + attributes.put(AnalyticsTags.ATTRIBUTE_AUTHORIZATION_FAILURE_REASON, failureReason); + + sendAnalytics(AnalyticsTags.ACTION_AUTHORIZATION_FAILED, attributes); + } + + /** + * Tracks Log Out Request. + * + */ + public static void trackLogOutRequest() { + + Map attributes = new HashMap<>(); + attributes.put(AnalyticsTags.ATTRIBUTE_LOGOUT_SUBMITTED, 1); + + sendAnalytics(AnalyticsTags.ACTION_LOG_OUT_REQUESTED, attributes); + } + + /** + * Tracks Log Out Successes. + * + */ + public static void trackLogOutResultSuccess() { + + Map attributes = new HashMap<>(); + attributes.put(AnalyticsTags.ATTRIBUTE_LOGOUT_SUCCESS, 1); + + sendAnalytics(AnalyticsTags.ACTION_LOG_OUT_SUCCEEDED, attributes); + } + + /** + * Tracks Log Out Failures. + * + * @param failureReason Failure Reason Action/Bad Request/Internal/Network/Unknown + */ + public static void trackLogOutResultFailure(String failureReason) { + + Map attributes = new HashMap<>(); + attributes.put(AnalyticsTags.ATTRIBUTE_LOGOUT_FAILURE, 1); + attributes.put(AnalyticsTags.ATTRIBUTE_LOGOUT_FAILURE_REASON, failureReason); + + sendAnalytics(AnalyticsTags.ACTION_LOG_OUT_FAILED, attributes); + } + /** * Tracks when users interact with the playback controls of the player. * @@ -299,11 +424,13 @@ public static void trackError(String tag, String errorMessage, Exception e) { * * @param content Content during which the ad was started. * @param currentPosition Current position in the content playback that the ad started at. + * @param adMetaData metaData containing ad details. */ - public static void trackAdStarted(Content content, long currentPosition) { + public static void trackAdStarted(Content content, long currentPosition, AdMetaData + adMetaData) { commonAdTrackingSteps(content, AnalyticsTags.ACTION_AD_START, new HashMap<>(), - currentPosition); + currentPosition, adMetaData); } /** @@ -312,16 +439,16 @@ public static void trackAdStarted(Content content, long currentPosition) { * SDK 4326 * * @param content Content during which the ad was played. - * @param duration Duration of ad run. * @param currentPosition Current position in the content playback that the ad finished at. + * @param adMetaData metaData containing ad details. */ - public static void trackAdEnded(Content content, long duration, long currentPosition) { + public static void trackAdEnded(Content content, long currentPosition, AdMetaData adMetaData) { HashMap attributes = new HashMap<>(); - attributes.put(AnalyticsTags.ATTRIBUTE_AD_SECONDS_WATCHED, duration); + attributes.put(AnalyticsTags.ATTRIBUTE_AD_SECONDS_WATCHED, adMetaData.getDurationPlayed()); commonAdTrackingSteps(content, AnalyticsTags.ACTION_AD_COMPLETE, attributes, - currentPosition); + currentPosition, adMetaData); } /** @@ -331,12 +458,15 @@ public static void trackAdEnded(Content content, long duration, long currentPosi * @param action Action to track. * @param attributes Attributes map to be added to action map. * @param currentPosition Current position in the content playback that the ad played. + * @param adMetaData metaData containing ad details. */ private static void commonAdTrackingSteps(Content content, String action, HashMap attributes, - long currentPosition) { - //TODO: add ad id SDK 4326 - attributes.put(AnalyticsTags.ATTRIBUTE_AD_ID, ""); + long currentPosition, AdMetaData adMetaData) { + + attributes.put(AnalyticsTags.ATTRIBUTE_AD_ID, adMetaData.getAdId()); + attributes.put(AnalyticsTags.ATTRIBUTE_AD_DURATION, adMetaData.getDurationReceived()); + attributes.put(AnalyticsTags.ATTRIBUTE_ADVERTISEMENT_TYPE, adMetaData.getAdType()); attributes.putAll(getBasicAnalyticsAttributesForContent(content)); attributes.put(AnalyticsTags.ATTRIBUTE_VIDEO_CURRENT_POSITION, currentPosition); diff --git a/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/helper/AuthHelper.java b/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/helper/AuthHelper.java index e05c4b0..17e1508 100644 --- a/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/helper/AuthHelper.java +++ b/ContentBrowser/src/main/java/com/amazon/android/contentbrowser/helper/AuthHelper.java @@ -17,6 +17,7 @@ import com.amazon.android.contentbrowser.ContentBrowser; import com.amazon.android.contentbrowser.R; +import com.amazon.android.model.content.Content; import com.amazon.android.module.ModuleManager; import com.amazon.android.ui.constants.PreferencesConstants; import com.amazon.android.ui.fragments.ErrorDialogFragment; @@ -131,6 +132,11 @@ public boolean isUserAuthenticated() { */ private static final String DEFAULT_MVPD_URL = "DEFAULT_MVPD_URL"; + /** + * String constant to be used as default error in authentication events. + */ + private static final String DEFAULT_AUTH_ERROR = "Unknown"; + /** * Authentication implementation reference. */ @@ -266,6 +272,22 @@ private void handleFailureCase(Subscriber subscriber, Bundle extras) { subscriber.onCompleted(); } + /** + * retrieve Error Category. + * + * @param extras Bundle. + * @return Error category. + */ + String retrieveErrorCategory(Bundle extras){ + Bundle bundle = extras.getBundle(AuthenticationConstants.ERROR_BUNDLE); + String authErrorCategory = DEFAULT_AUTH_ERROR; + if (bundle != null) { + authErrorCategory = bundle.getString(AuthenticationConstants.ERROR_CATEGORY, + DEFAULT_AUTH_ERROR); + } + return authErrorCategory; + } + /** * Logout observable. * @@ -274,12 +296,13 @@ private void handleFailureCase(Subscriber subscriber, Bundle extras) { public Observable logout() { Log.v(TAG, "logout called."); - + AnalyticsHelper.trackLogOutRequest(); return Observable.create(subscriber -> { mIAuthentication.logout(mAppContext, new IAuthentication.ResponseHandler() { @Override public void onSuccess(Bundle extras) { + AnalyticsHelper.trackLogOutResultSuccess(); broadcastAuthenticationStatus(false); Log.d(TAG, "Account logout success"); handleSuccessCase(subscriber, extras); @@ -288,6 +311,7 @@ public void onSuccess(Bundle extras) { @Override public void onFailure(Bundle extras) { + AnalyticsHelper.trackLogOutResultFailure(retrieveErrorCategory(extras)); Log.e(TAG, "Account logout failure"); handleFailureCase(subscriber, extras); } @@ -331,6 +355,9 @@ public void onFailure(Bundle extras) { */ public Observable isAuthorized() { + //get the requested content + Content content = mContentBrowser.getLastSelectedContent(); + AnalyticsHelper.trackAuthorizationRequest(content); return Observable.create(subscriber -> { // Check if user is logged in. If not, show authentication activity. mIAuthentication.isResourceAuthorized(mAppContext, "", @@ -340,6 +367,8 @@ public void onSuccess(Bundle extras) { Log.d(TAG, "Resource Authorization " + "success"); + AnalyticsHelper + .trackAuthorizationResultSuccess(content); handleSuccessCase(subscriber, extras); } @@ -348,6 +377,8 @@ public void onFailure(Bundle extras) { Log.e(TAG, "Resource Authorization " + "failed"); + AnalyticsHelper + .trackAuthorizationResultFailure(content, retrieveErrorCategory(extras)); handleFailureCase(subscriber, extras); } }); @@ -388,6 +419,7 @@ private void handleAuthenticationActivityResultBundle(Bundle bundle) { */ public Observable authenticateWithActivity() { + AnalyticsHelper.trackAuthenticationRequest(); return mRxLauncher.from(mContentBrowser.getNavigator() .getActiveActivity()) .startActivityForResult(getIAuthentication() @@ -405,6 +437,21 @@ public Observable authenticateWithActivity() { else if (activityResult.data != null) { resultBundle = activityResult.data.getExtras(); } + else { + // Cancel auth request. + cancelAllRequests(); + return resultBundle; + } + + //Check if authentication succeeded. + if (activityResult.isOk()) { + AnalyticsHelper.trackAuthenticationResultSuccess(); + } + else { + AnalyticsHelper.trackAuthenticationResultFailure + (retrieveErrorCategory(resultBundle)); + } + handleAuthenticationActivityResultBundle(resultBundle); if (resultBundle != null) { @@ -425,24 +472,52 @@ private Observable authenticate() { return isAuthenticated().flatMap( // With isAuthenticated result bundle do - isAuthenticatedResultBundle -> - Observable.create(new OperatorIfThen<>( - // If isAuthenticated success then do - // isAuthorized. - () -> isAuthenticatedResultBundle.getBoolean - (RESULT), - isAuthorized(), - // If isAuthenticated failed then do - // authenticateWithActivity. - // Warning!!! After this point all the - // upcoming tasks needs to be handled - // in upcoming activity!!! - authenticateWithActivity() - ) - ) + isAuthenticatedResultBundle -> { + if (isAuthenticatedResultBundle.getBoolean(RESULT)) { + // If isAuthenticated success then do isAuthorized. + return isAuthorized(); + } + else { + // If isAuthenticated failed then do + // authenticateWithActivity. + // Warning!!! After this point all the + // upcoming tasks needs to be handled + // in upcoming activity!!! + return authenticateWithActivity(); + } + } ); } + /** + * Handle Authentication Chain. + * + * @param iAuthorizedHandler Authorized handler. + * @param authenticationResult Bundle + */ + public void handleAuthChain(IAuthorizedHandler iAuthorizedHandler, Bundle authenticationResult) { + + if (authenticationResult == null) { + Log.w(TAG, "resultBundle is null, user probably pressed back on login screen"); + } + // If we got Authentication Result success + else if (authenticationResult.getBoolean(RESULT)) { + // Check if we are authorized in current activity context. + isAuthorized().subscribe(bundle -> { + // If we were authorized return success. + if (bundle.getBoolean(RESULT)) { + iAuthorizedHandler.onAuthorized(bundle); + } else { + // If we were not authorized return show error. + handleErrorBundle(bundle); + } + }); + } else { + // If everything failed then show error. + handleErrorBundle(authenticationResult); + } + } + /** * Handle Authentication Chain. * @@ -454,24 +529,34 @@ public void handleAuthChain(IAuthorizedHandler iAuthorizedHandler) { // Check authentication first. authenticate() .subscribe(resultBundle -> { - if(resultBundle == null) { - Log.w(TAG, "resultBundle is null, user probably pressed back on login screen"); + if (resultBundle == null) { + Log.w(TAG, "resultBundle is null, user probably pressed back on login " + + "screen"); } // If we got a login screen and login was success else if (resultBundle.getBoolean(RESULT_FROM_ACTIVITY)) { - // Check if we are authorized in upcoming activity context. - mContentBrowser - .getNavigator() - .runOnUpcomingActivity(() -> isAuthorized().subscribe(bundle -> { - // If we were authorized return success. - if (resultBundle.getBoolean(RESULT)) { - iAuthorizedHandler.onAuthorized(resultBundle); - } - else { - // If we were not authorized return show error. - handleErrorBundle(resultBundle); - } - })); + //If authentication succeeded + if (resultBundle.getBoolean(RESULT)) { + // Check if we are authorized in upcoming activity context. + mContentBrowser + .getNavigator() + .runOnUpcomingActivity(() -> isAuthorized().subscribe(bundle -> { + // If we were authorized return success. + if (bundle.getBoolean(RESULT)) { + iAuthorizedHandler.onAuthorized(bundle); + } + else { + // If we were not authorized return show error. + handleErrorBundle(bundle); + } + })); + } + else { + // If we were not authenticated return show error. + mContentBrowser.getNavigator() + .runOnUpcomingActivity(() -> handleErrorBundle + (resultBundle)); + } } else if (resultBundle.getBoolean(RESULT)) { // If we were logged in and authorized return success. @@ -479,9 +564,7 @@ else if (resultBundle.getBoolean(RESULT)) { } else { // If everything failed then show error. - mContentBrowser.getNavigator() - .runOnUpcomingActivity(() -> handleErrorBundle - (resultBundle)); + handleErrorBundle(resultBundle); } }, throwable -> Log.e(TAG, "handleAuthChain failed:", throwable)); } @@ -522,10 +605,12 @@ public void cancelAllRequests() { private void logoutFromAccount(Context context) { Log.v(TAG, "logoutFromAccount called."); + AnalyticsHelper.trackLogOutRequest(); mIAuthentication.logout(context, new IAuthentication.ResponseHandler() { @Override public void onSuccess(Bundle extras) { + AnalyticsHelper.trackLogOutResultSuccess(); broadcastAuthenticationStatus(false); Log.d(TAG, "Account logout success"); } @@ -533,6 +618,7 @@ public void onSuccess(Bundle extras) { @Override public void onFailure(Bundle extras) { + AnalyticsHelper.trackLogOutResultFailure(retrieveErrorCategory(extras)); Log.e(TAG, "Account logout failure"); } }); @@ -544,7 +630,7 @@ public void onFailure(Bundle extras) { * @param bundle Auth error bundle. * @return Error category. */ - public static ErrorUtils.ERROR_CATEGORY convertAuthErrorToErrorUtils(Bundle bundle) { + private static ErrorUtils.ERROR_CATEGORY convertAuthErrorToErrorUtils(Bundle bundle) { switch (bundle.getString(AuthenticationConstants.ERROR_CATEGORY)) { case AuthenticationConstants.REGISTRATION_ERROR_CATEGORY: @@ -577,19 +663,24 @@ public void handleErrorBundle(Bundle extras) { (fragment, errorButtonType, errorCategory) -> { if (ErrorUtils.ERROR_BUTTON_TYPE.DISMISS == errorButtonType) { fragment.dismiss(); + mContentBrowser.updateContentActions(); } else if (ErrorUtils.ERROR_BUTTON_TYPE.LOGOUT == errorButtonType) { + AnalyticsHelper.trackLogOutRequest(); mIAuthentication.logout(activity, new IAuthentication.ResponseHandler() { @Override public void onSuccess(Bundle extras) { + AnalyticsHelper.trackLogOutResultSuccess(); broadcastAuthenticationStatus(false); fragment.dismiss(); + mContentBrowser.updateContentActions(); } @Override public void onFailure(Bundle extras) { + AnalyticsHelper.trackLogOutResultFailure(retrieveErrorCategory(extras)); fragment.getArguments() .putString(ErrorDialogFragment.ARG_ERROR_MESSAGE, activity.getResources().getString( diff --git a/DynamicParser/src/main/java/com/amazon/dynamicparser/impl/XmlParser.java b/DynamicParser/src/main/java/com/amazon/dynamicparser/impl/XmlParser.java index 8635047..a7d79d8 100644 --- a/DynamicParser/src/main/java/com/amazon/dynamicparser/impl/XmlParser.java +++ b/DynamicParser/src/main/java/com/amazon/dynamicparser/impl/XmlParser.java @@ -51,12 +51,17 @@ public class XmlParser implements IParser { /** * Constant name tag for node text field. */ - public final String TEXT_TAG = "#text"; + public static final String TEXT_TAG = "#text"; + + /** + * Constant name tag for node cdata field. + */ + public static final String CDATA_TAG = "#cdata-section"; /** * Constant name tag for node attributes. */ - public final String ATTRIBUTES_TAG = "#attributes"; + public static final String ATTRIBUTES_TAG = "#attributes"; /** * Debug tag. @@ -228,7 +233,7 @@ private Map translateNodeListToMap(NodeList root) { Object value; // If the node is a plain text node, assign its text content to 'value'. - if (node.getNodeName().equals(TEXT_TAG)) { + if (node.getNodeName().equals(TEXT_TAG) || node.getNodeName().equals(CDATA_TAG) ) { value = node.getTextContent(); } // Otherwise, recursively add its child nodes to the result. diff --git a/FacebookAuthComponent/src/main/java/com/amazon/android/auth/facebook/FacebookAuthentication.java b/FacebookAuthComponent/src/main/java/com/amazon/android/auth/facebook/FacebookAuthentication.java index 81dc842..02d48b8 100644 --- a/FacebookAuthComponent/src/main/java/com/amazon/android/auth/facebook/FacebookAuthentication.java +++ b/FacebookAuthComponent/src/main/java/com/amazon/android/auth/facebook/FacebookAuthentication.java @@ -17,6 +17,7 @@ import com.amazon.android.utils.Preferences; import com.amazon.auth.IAuthentication; +import com.amazon.auth.AuthenticationConstants; import com.facebook.FacebookSdk; import android.content.Context; @@ -124,8 +125,7 @@ protected void onPostExecute(Map map) { // Encountered an unknown error while checking access token. if (map == null) { - bundle.putString(ResponseHandler.MESSAGE, - context.getString(R.string.error_checking_token)); + populateErrorBundle(bundle, context.getString(R.string.error_checking_token)); responseHandler.onFailure(bundle); return; } @@ -141,10 +141,9 @@ protected void onPostExecute(Map map) { && map.containsKey(IAuthentication.ERROR)) { // Add error message and status code. - bundle.putInt(ResponseHandler.STATUS_CODE, Integer.parseInt(map.get - (ResponseHandler.STATUS_CODE).toString())); - bundle.putString(ResponseHandler.MESSAGE, - map.get(IAuthentication.ERROR).toString()); + populateAuthenticationFailureBundle(Integer.parseInt(map.get + (ResponseHandler.STATUS_CODE).toString()), bundle, map.get + (IAuthentication.ERROR).toString()); } responseHandler.onFailure(bundle); } @@ -161,8 +160,7 @@ protected Map doInBackground(Void... params) { // Access token is null or empty so we know its not valid. else { Log.d(TAG, context.getString(R.string.access_token_null)); - bundle.putString(ResponseHandler.MESSAGE, - context.getString(R.string.access_token_null)); + populateErrorBundle(bundle, context.getString(R.string.access_token_null)); responseHandler.onFailure(bundle); } } @@ -225,4 +223,38 @@ void setAccessToken(String accessToken) { mAccessToken = accessToken; } + + /** + * Bundle to be sent on failures other than Authentication and Authorization + * + * @param bundle Bundle to populate + * @param errorMessage error message received + */ + private void populateErrorBundle(Bundle bundle, String errorMessage) { + + Bundle errorBundle = new Bundle(); + errorBundle.putString(ResponseHandler.MESSAGE, + errorMessage); + errorBundle.putString( + AuthenticationConstants.ERROR_CATEGORY, + AuthenticationConstants.AUTHENTICATION_ERROR_CATEGORY); + bundle.putBundle( + AuthenticationConstants.ERROR_BUNDLE, errorBundle); + } + + /** + * Bundle to be sent on failures other than Authentication and Authorization + * + * @param statusCode status code received because of failure + * @param bundle Bundle to populate + * @param errorMessage error message received + */ + private void populateAuthenticationFailureBundle(int statusCode, Bundle bundle, String + errorMessage) { + + populateErrorBundle(bundle, errorMessage); + bundle.getBundle( + AuthenticationConstants.ERROR_BUNDLE).putInt(ResponseHandler.STATUS_CODE, + statusCode); + } } diff --git a/FreeWheelAdsComponent/src/main/java/com/amazon/ads/android/freewheel/FreeWheelAds.java b/FreeWheelAdsComponent/src/main/java/com/amazon/ads/android/freewheel/FreeWheelAds.java index 3e35f29..31db11f 100644 --- a/FreeWheelAdsComponent/src/main/java/com/amazon/ads/android/freewheel/FreeWheelAds.java +++ b/FreeWheelAdsComponent/src/main/java/com/amazon/ads/android/freewheel/FreeWheelAds.java @@ -210,7 +210,7 @@ public void setCurrentVideoPosition(double position) { (position / 1000)) { Log.d(TAG, "Mid roll matches at:" + position); mMidrollSlotsIsPlayedList.set(i, true); - startSlot(); + startSlot(IAds.MID_ROLL_AD); slot.play(); break; } @@ -219,6 +219,18 @@ public void setCurrentVideoPosition(double position) { } } + /** + * Return true if post roll ads are available; false otherwise. Currently this component does + * not support post roll ads so this method always returns false. + * + * @return False because post roll ads are not supported. + */ + @Override + public boolean isPostRollAvailable() { + + return false; + } + /** * Set activity state. * @@ -359,8 +371,8 @@ public void run(IEvent e) { else { Log.e(TAG, "Request failed. Playing main content."); // Ad request failed, continue with the content. - startSlot(); - endSlot(false); + startSlot(null); + endSlot(null); } } } @@ -420,7 +432,7 @@ public void run(IEvent e) { if (completedSlot.getTimePositionClass() == mAdConstants.TIME_POSITION_CLASS_MIDROLL()) { // Set mid roll flag and end the ad slot. - endSlot(true); + endSlot(IAds.MID_ROLL_AD); } } }); @@ -439,30 +451,37 @@ private void playNextPreroll() { ISlot nextSlot = mPreRollSlots.remove(0); Log.d(TAG, "Playing preroll slot: " + nextSlot.getCustomId()); // Play next pre roll slot. - startSlot(); + startSlot(IAds.PRE_ROLL_AD); nextSlot.play(); } else { Log.d(TAG, "Finished all prerolls. Starting main content."); - endSlot(false); + endSlot(IAds.PRE_ROLL_AD); } } else { - endSlot(false); + endSlot(null); } } /** * Start Ad slot. * Notifies listener and captures ad slot start time. + * + * @param adType type of ad currently being played */ - private void startSlot() { + private void startSlot(final String adType) { new Handler(mActivity.getMainLooper()).post(new Runnable() { public void run() { // Let listener know about Ad slot start event. if (mIAdsEvents != null) { - mIAdsEvents.onAdSlotStarted(null); + // Put ad metadata in a Bundle. + Bundle extras = getBasicAdDetailBundle(); + if(adType != null) { + extras.putString(AD_TYPE, adType); + } + mIAdsEvents.onAdSlotStarted(extras); } } }); @@ -475,9 +494,9 @@ public void run() { * End Ad slot. * Notifies listener, sends duration and disposes AdContext. * - * @param wasAMidRoll True if the ad is a mid roll ad, else false. + * @param adType type of ad currently being played */ - private void endSlot(final boolean wasAMidRoll) { + private void endSlot(final String adType) { new Handler(mActivity.getMainLooper()).post(new Runnable() { public void run() { @@ -485,10 +504,12 @@ public void run() { if (mIAdsEvents != null) { // Calculate how long Ads played. long adSlotTime = SystemClock.elapsedRealtime() - mAdSlotStartTime; - // Put calculated time in an Bundle. - Bundle extras = new Bundle(); - extras.putLong(DURATION, adSlotTime); - extras.putBoolean(WAS_A_MID_ROLL, wasAMidRoll); + // Put calculated time and ad metadata in a Bundle. + Bundle extras = getBasicAdDetailBundle(); + extras.putLong(DURATION_PLAYED, adSlotTime); + if(adType != null) { + extras.putString(AD_TYPE, adType); + } // Let listener know about Ad slot stop event. mIAdsEvents.onAdSlotEnded(extras); } @@ -521,4 +542,16 @@ public Bundle getExtra() { return mExtras; } + + /** + * provide basic ad details + * + * @return bundle containing ad details. + */ + private Bundle getBasicAdDetailBundle() { + + Bundle extras = new Bundle(); + extras.putString(ID, mCurrentVideoAdId); + return extras; + } } diff --git a/GoogleAnalyticsComponent/src/main/assets/configurations/GoogleCustomDimensionTags.json b/GoogleAnalyticsComponent/src/main/assets/configurations/GoogleCustomDimensionTags.json index 7bda024..2b39aec 100644 --- a/GoogleAnalyticsComponent/src/main/assets/configurations/GoogleCustomDimensionTags.json +++ b/GoogleAnalyticsComponent/src/main/assets/configurations/GoogleCustomDimensionTags.json @@ -11,8 +11,8 @@ "ATTRIBUTE_PURCHASE_TYPE": "10", "ATTRIBUTE_PURCHASE_SOURCE": "11", "ATTRIBUTE_APP_NAME": "12", - "ATTRIBUTE_APP_AUTHENTICATION_SOURCE": "13", - "ATTRIBUTE_LOGIN_FAILURE_REASON": "14", + "ATTRIBUTE_AUTHENTICATION_FAILURE_REASON": "13", + "ATTRIBUTE_AUTHORIZATION_FAILURE_REASON": "14", "ATTRIBUTE_LOGOUT_FAILURE_REASON": "15", "ATTRIBUTE_AIRDATE": "16", "ATTRIBUTE_PUBLISHER_NAME": "17", @@ -20,5 +20,4 @@ "ATTRIBUTE_VIDEO_ID": "19", "ATTRIBUTE_CONTENT_AVAILABLE": "20", "ATTRIBUTE_REQUEST_SOURCE": "21" - -} \ No newline at end of file +} diff --git a/GoogleAnalyticsComponent/src/main/assets/configurations/GoogleCustomMetricTags.json b/GoogleAnalyticsComponent/src/main/assets/configurations/GoogleCustomMetricTags.json index d836734..929a258 100644 --- a/GoogleAnalyticsComponent/src/main/assets/configurations/GoogleCustomMetricTags.json +++ b/GoogleAnalyticsComponent/src/main/assets/configurations/GoogleCustomMetricTags.json @@ -3,7 +3,16 @@ "ATTRIBUTE_VIDEO_SECONDS_WATCHED": "2", "ATTRIBUTE_VIDEO_CURRENT_POSITION": "3", "ATTRIBUTE_AD_ID": "4", + "ATTRIBUTE_AUTHENTICATION_SUBMITTED": "5", + "ATTRIBUTE_AUTHENTICATION_SUCCESS": "6", + "ATTRIBUTE_AUTHENTICATION_FAILURE": "7", + "ATTRIBUTE_AUTHORIZATION_SUBMITTED": "8", + "ATTRIBUTE_AUTHORIZATION_SUCCESS": "9", + "ATTRIBUTE_AUTHORIZATION_FAILURE": "10", "ATTRIBUTE_VIDEO_DURATION": "11", "ATTRIBUTE_EXPIRED_RECOMMENDATIONS_COUNT": "12", - "ATTRIBUTE_RECOMMENDATION_ID": "13" -} \ No newline at end of file + "ATTRIBUTE_RECOMMENDATION_ID": "13", + "ATTRIBUTE_LOGOUT_SUBMITTED": "14", + "ATTRIBUTE_LOGOUT_SUCCESS": "15", + "ATTRIBUTE_LOGOUT_FAILURE": "16" +} diff --git a/LoginWithAmazonComponent/src/main/java/com/amazon/loginwithamazon/LoginWithAmazonAuthentication.java b/LoginWithAmazonComponent/src/main/java/com/amazon/loginwithamazon/LoginWithAmazonAuthentication.java index e96924b..efe04a9 100644 --- a/LoginWithAmazonComponent/src/main/java/com/amazon/loginwithamazon/LoginWithAmazonAuthentication.java +++ b/LoginWithAmazonComponent/src/main/java/com/amazon/loginwithamazon/LoginWithAmazonAuthentication.java @@ -24,6 +24,7 @@ import com.amazon.auth.IAuthentication; +import com.amazon.auth.AuthenticationConstants; import com.amazon.identity.auth.device.shared.APIListener; import com.amazon.android.utils.Preferences; @@ -95,6 +96,8 @@ public void isUserLoggedIn(Context context, final ResponseHandler responseHandle public void onSuccess(Bundle bundle) { // If the token is null then return false. if (bundle.get(mContext.getString(R.string.COM_AMAZON_IDENTITY_AUTH_DEVICE_AUTHORIZATION_TOKEN)) == null) { + populateErrorBundle(bundle, AuthenticationConstants + .AUTHENTICATION_ERROR_CATEGORY); responseHandler.onFailure(bundle); } else { @@ -106,6 +109,7 @@ public void onSuccess(Bundle bundle) { @Override public void onError(AuthError authError) { // There is some other auth issue. + populateErrorBundle(bundle, String.valueOf(authError.getCategory())); responseHandler.onFailure(bundle); } }); @@ -136,19 +140,22 @@ public void isResourceAuthorized(Context context, String resourceId, ResponseHan @Override public void logout(Context context, final ResponseHandler responseHandler) { + final Bundle bundle = new Bundle(); + mAuthManager.clearAuthorizationState(new APIListener() { @Override public void onSuccess(Bundle results) { Preferences.setBoolean(IS_LOGGED_IN, false); - responseHandler.onSuccess(new Bundle()); + responseHandler.onSuccess(bundle); } @Override public void onError(AuthError authError) { Log.e(TAG, "Error clearing authorization state.", authError); - responseHandler.onFailure(new Bundle()); + populateErrorBundle(bundle, String.valueOf(authError.getCategory())); + responseHandler.onFailure(bundle); } }); } @@ -161,4 +168,19 @@ public void cancelAllRequests() { } + /** + * Bundle to be sent on failures other than Authentication and Authorization + * + * @param errorCategory error category received + * @param bundle Bundle to populate + */ + private void populateErrorBundle(Bundle bundle, String errorCategory) { + + Bundle errorBundle = new Bundle(); + errorBundle.putString( + AuthenticationConstants.ERROR_CATEGORY, + errorCategory); + bundle.putBundle( + AuthenticationConstants.ERROR_BUNDLE, errorBundle); + } } diff --git a/PassThroughAdsComponent/src/main/java/com/amazon/ads/passthrough/PassThroughAds.java b/PassThroughAdsComponent/src/main/java/com/amazon/ads/passthrough/PassThroughAds.java index d5da9ef..b163045 100644 --- a/PassThroughAdsComponent/src/main/java/com/amazon/ads/passthrough/PassThroughAds.java +++ b/PassThroughAdsComponent/src/main/java/com/amazon/ads/passthrough/PassThroughAds.java @@ -78,6 +78,15 @@ public void setCurrentVideoPosition(double position) { } + /** + * {@inheritDoc} + */ + @Override + public boolean isPostRollAvailable() { + + return false; + } + /** * {@inheritDoc} */ diff --git a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/CaptionStyleCompat.java b/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/CaptionStyleCompat.java deleted file mode 100644 index b61617e..0000000 --- a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/CaptionStyleCompat.java +++ /dev/null @@ -1,183 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.amazon.android.uamp.constants; - -import android.annotation.TargetApi; -import android.graphics.Color; -import android.graphics.Typeface; -import android.view.accessibility.CaptioningManager; - -/** - * A compatibility wrapper for {@link CaptioningManager.CaptionStyle}. - */ -public final class CaptionStyleCompat { - - /** - * Edge type value specifying no character edges. - */ - private static final int EDGE_TYPE_NONE = 0; - - /** - * Edge type value specifying uniformly outlined character edges. - */ - public static final int EDGE_TYPE_OUTLINE = 1; - - /** - * Edge type value specifying drop-shadowed character edges. - */ - public static final int EDGE_TYPE_DROP_SHADOW = 2; - - /** - * Edge type value specifying raised bevel character edges. - */ - public static final int EDGE_TYPE_RAISED = 3; - - /** - * Edge type value specifying depressed bevel character edges. - */ - public static final int EDGE_TYPE_DEPRESSED = 4; - - /** - * Use color setting specified by the track and fallback to default caption style. - */ - public static final int USE_TRACK_COLOR_SETTINGS = 1; - - /** - * Default caption style. - */ - public static final CaptionStyleCompat DEFAULT = new CaptionStyleCompat( - Color.WHITE, Color.BLACK, Color.TRANSPARENT, EDGE_TYPE_NONE, Color.WHITE, null); - - /** - * The preferred foreground color. - */ - public final int foregroundColor; - - /** - * The preferred background color. - */ - public final int backgroundColor; - - /** - * The preferred window color. - */ - public final int windowColor; - - /** - * The preferred edge type. One of: - *

    - */ - public final int edgeType; - - /** - * The preferred edge color, if using an edge type other than {@link #EDGE_TYPE_NONE}. - */ - public final int edgeColor; - - /** - * The preferred typeface. - */ - public final Typeface typeface; - - private static final int SDK_INT = android.os.Build.VERSION.SDK_INT; - - /** - * Creates a {@link CaptionStyleCompat} equivalent to a provided {@link - * CaptioningManager.CaptionStyle}. - * - * @param captionStyle A {@link CaptioningManager.CaptionStyle}. - * @return The equivalent {@link CaptionStyleCompat}. - */ - @TargetApi(19) - public static CaptionStyleCompat createFromCaptionStyle( - CaptioningManager.CaptionStyle captionStyle) { - - if (SDK_INT >= 21) { - return createFromCaptionStyleV21(captionStyle); - } - else { - // Note - Any caller must be on at least API level 19 or greater (because - // CaptionStyle did - // not exist in earlier API levels). - return createFromCaptionStyleV19(captionStyle); - } - } - - /** - * @param foregroundColor See {@link #foregroundColor}. - * @param backgroundColor See {@link #backgroundColor}. - * @param windowColor See {@link #windowColor}. - * @param edgeType See {@link #edgeType}. - * @param edgeColor See {@link #edgeColor}. - * @param typeface See {@link #typeface}. - */ - public CaptionStyleCompat(int foregroundColor, int backgroundColor, int windowColor, - int edgeType, int edgeColor, Typeface typeface) { - - this.foregroundColor = foregroundColor; - this.backgroundColor = backgroundColor; - this.windowColor = windowColor; - this.edgeType = edgeType; - this.edgeColor = edgeColor; - this.typeface = typeface; - } - - @TargetApi(19) - private static CaptionStyleCompat createFromCaptionStyleV19( - CaptioningManager.CaptionStyle captionStyle) { - - return new CaptionStyleCompat( - captionStyle.foregroundColor, captionStyle.backgroundColor, Color.TRANSPARENT, - captionStyle.edgeType, captionStyle.edgeColor, captionStyle.getTypeface()); - } - - @TargetApi(21) - private static CaptionStyleCompat createFromCaptionStyleV21( - CaptioningManager.CaptionStyle captionStyle) { - - return new CaptionStyleCompat( - captionStyle.hasForegroundColor() ? - captionStyle.foregroundColor : DEFAULT.foregroundColor, - captionStyle.hasBackgroundColor() ? - captionStyle.backgroundColor : DEFAULT.backgroundColor, - captionStyle.hasWindowColor() ? captionStyle.windowColor : DEFAULT.windowColor, - captionStyle.hasEdgeType() ? captionStyle.edgeType : DEFAULT.edgeType, - captionStyle.hasEdgeColor() ? captionStyle.edgeColor : DEFAULT.edgeColor, - captionStyle.getTypeface()); - } - -} diff --git a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/CuePainter.java b/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/CuePainter.java deleted file mode 100644 index 0fcfbc0..0000000 --- a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/CuePainter.java +++ /dev/null @@ -1,394 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.amazon.android.uamp.textrenderer; - -import com.amazon.android.uamp.constants.CaptionStyleCompat; -import com.amazon.mediaplayer.playback.text.Cue; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.RectF; -import android.text.Layout; -import android.text.StaticLayout; -import android.text.TextPaint; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.util.Log; - -/** - * Draws {@link Cue}s. - */ -/* package */ final class CuePainter { - - private static final String TAG = "CuePainter"; - - /** - * Ratio of inner padding to font size. - */ - private static final float INNER_PADDING_RATIO = 0.125f; - - /** - * Temporary rectangle used for computing line bounds. - */ - private final RectF lineBounds = new RectF(); - - // Styled dimensions. - private final float cornerRadius; - private final float outlineWidth; - private final float shadowRadius; - private final float shadowOffset; - private final float spacingMult; - private final float spacingAdd; - - private final TextPaint textPaint; - private final Paint paint; - - // Previous input variables. - private CharSequence cueText; - private Layout.Alignment cueTextAlignment; - private float cueLine; - private int cueLineType; - private int cueLineAnchor; - private float cuePosition; - private int cuePositionAnchor; - private float cueSize; - private boolean applyEmbeddedStyles; - private int foregroundColor; - private int backgroundColor; - private int windowColor; - private int edgeColor; - private int edgeType; - private float textSizePx; - private float bottomPaddingFraction; - private int parentLeft; - private int parentTop; - private int parentRight; - private int parentBottom; - - // Derived drawing variables. - private StaticLayout textLayout; - private int textLeft; - private int textTop; - private int textPaddingX; - - private static boolean areEqual(Object o1, Object o2) { - - return o1 == null ? o2 == null : o1.equals(o2); - } - - /** - * Constructor - * - * @param context application context - */ - public CuePainter(Context context) { - - int[] viewAttr = {android.R.attr.lineSpacingExtra, android.R.attr.lineSpacingMultiplier}; - TypedArray styledAttributes = context.obtainStyledAttributes(null, viewAttr, 0, 0); - spacingAdd = styledAttributes.getDimensionPixelSize(0, 0); - spacingMult = styledAttributes.getFloat(1, 1); - styledAttributes.recycle(); - - Resources resources = context.getResources(); - DisplayMetrics displayMetrics = resources.getDisplayMetrics(); - int twoDpInPx = Math.round((2f * displayMetrics.densityDpi) / DisplayMetrics - .DENSITY_DEFAULT); - cornerRadius = twoDpInPx; - outlineWidth = twoDpInPx; - shadowRadius = twoDpInPx; - shadowOffset = twoDpInPx; - - textPaint = new TextPaint(); - textPaint.setAntiAlias(true); - textPaint.setSubpixelText(true); - - paint = new Paint(); - paint.setAntiAlias(true); - paint.setStyle(Paint.Style.FILL); - } - - /** - * Draws the provided {@link Cue} into a canvas with the specified styling. - *

    - * A call to this method is able to use cached results of calculations made during the previous - * call, and so an instance of this class is able to optimize repeated calls to this method in - * which the same parameters are passed. - * - * @param cue The cue to draw. - * @param applyEmbeddedStyles Whether styling embedded within the cue should be applied. - * @param style The style to use when drawing the cue text. - * @param textSizePx The text size to use when drawing the cue text, in pixels. - * @param bottomPaddingFraction The bottom padding fraction to apply when {@link Cue#line} is - * {@link Cue#DIMEN_UNSET}, as a fraction of the viewport height - * @param canvas The canvas into which to draw. - * @param cueBoxLeft The left position of the enclosing cue box. - * @param cueBoxTop The top position of the enclosing cue box. - * @param cueBoxRight The right position of the enclosing cue box. - * @param cueBoxBottom The bottom position of the enclosing cue box. - */ - public void draw(Cue cue, boolean applyEmbeddedStyles, CaptionStyleCompat style, float - textSizePx, - float bottomPaddingFraction, Canvas canvas, int cueBoxLeft, int cueBoxTop, - int cueBoxRight, - int cueBoxBottom) { - - CharSequence cueText = cue.text; - if (TextUtils.isEmpty(cueText)) { - // Nothing to draw. - return; - } - if (!applyEmbeddedStyles) { - // Strip out any embedded styling. - cueText = cueText.toString(); - } - if (areCharSequencesEqual(this.cueText, cueText) - && areEqual(this.cueTextAlignment, cue.textAlignment) - && this.cueLine == cue.line - && this.cueLineType == cue.lineType - && areEqual(this.cueLineAnchor, cue.lineAnchor) - && this.cuePosition == cue.position - && areEqual(this.cuePositionAnchor, cue.positionAnchor) - && this.cueSize == cue.size - && this.applyEmbeddedStyles == applyEmbeddedStyles - && this.foregroundColor == style.foregroundColor - && this.backgroundColor == style.backgroundColor - && this.windowColor == style.windowColor - && this.edgeType == style.edgeType - && this.edgeColor == style.edgeColor - && areEqual(this.textPaint.getTypeface(), style.typeface) - && this.textSizePx == textSizePx - && this.bottomPaddingFraction == bottomPaddingFraction - && this.parentLeft == cueBoxLeft - && this.parentTop == cueBoxTop - && this.parentRight == cueBoxRight - && this.parentBottom == cueBoxBottom) { - // We can use the cached layout. - drawLayout(canvas); - return; - } - - this.cueText = cueText; - this.cueTextAlignment = cue.textAlignment; - this.cueLine = cue.line; - this.cueLineType = cue.lineType; - this.cueLineAnchor = cue.lineAnchor; - this.cuePosition = cue.position; - this.cuePositionAnchor = cue.positionAnchor; - this.cueSize = cue.size; - this.applyEmbeddedStyles = applyEmbeddedStyles; - this.foregroundColor = style.foregroundColor; - this.backgroundColor = style.backgroundColor; - this.windowColor = style.windowColor; - this.edgeType = style.edgeType; - this.edgeColor = style.edgeColor; - this.textPaint.setTypeface(style.typeface); - this.textSizePx = textSizePx; - this.bottomPaddingFraction = bottomPaddingFraction; - this.parentLeft = cueBoxLeft; - this.parentTop = cueBoxTop; - this.parentRight = cueBoxRight; - this.parentBottom = cueBoxBottom; - - int parentWidth = parentRight - parentLeft; - int parentHeight = parentBottom - parentTop; - - textPaint.setTextSize(textSizePx); - int textPaddingX = (int) (textSizePx * INNER_PADDING_RATIO + 0.5f); - - int availableWidth = parentWidth - textPaddingX * 2; - if (cueSize != Cue.DIMEN_UNSET) { - availableWidth = (int) (availableWidth * cueSize); - } - if (availableWidth <= 0) { - Log.w(TAG, "Skipped drawing subtitle cue (insufficient space)"); - return; - } - - Layout.Alignment textAlignment = cueTextAlignment == null ? Layout.Alignment. - ALIGN_CENTER : cueTextAlignment; - textLayout = new StaticLayout(cueText, textPaint, availableWidth, textAlignment, - spacingMult, - spacingAdd, true); - int textHeight = textLayout.getHeight(); - int textWidth = 0; - int lineCount = textLayout.getLineCount(); - for (int i = 0; i < lineCount; i++) { - textWidth = Math.max((int) Math.ceil(textLayout.getLineWidth(i)), textWidth); - } - textWidth += textPaddingX * 2; - - int textLeft; - int textRight; - if (cuePosition != Cue.DIMEN_UNSET) { - int anchorPosition = Math.round(parentWidth * cuePosition) + parentLeft; - textLeft = cuePositionAnchor == Cue.ANCHOR_TYPE_END ? anchorPosition - textWidth - : cuePositionAnchor == Cue.ANCHOR_TYPE_MIDDLE ? (anchorPosition * 2 - - textWidth) / 2 - : anchorPosition; - textLeft = Math.max(textLeft, parentLeft); - textRight = Math.min(textLeft + textWidth, parentRight); - } - else { - textLeft = (parentWidth - textWidth) / 2; - textRight = textLeft + textWidth; - } - - int textTop; - int textBottom; - if (cueLine != Cue.DIMEN_UNSET) { - int anchorPosition; - if (cueLineType == Cue.LINE_TYPE_FRACTION) { - anchorPosition = Math.round(parentHeight * cueLine) + parentTop; - } - else { - // cueLineType == Cue.LINE_TYPE_NUMBER - int firstLineHeight = textLayout.getLineBottom(0) - textLayout.getLineTop(0); - if (cueLine >= 0) { - anchorPosition = Math.round(cueLine * firstLineHeight) + parentTop; - } - else { - anchorPosition = Math.round(cueLine * firstLineHeight) + parentBottom; - } - } - textTop = cueLineAnchor == Cue.ANCHOR_TYPE_END ? anchorPosition - textHeight - : cueLineAnchor == Cue.ANCHOR_TYPE_MIDDLE ? (anchorPosition * 2 - textHeight) - / 2 - : anchorPosition; - textBottom = textTop + textHeight; - if (textBottom > parentBottom) { - textTop = parentBottom - textHeight; - textBottom = parentBottom; - } - else if (textTop < parentTop) { - textTop = parentTop; - textBottom = parentTop + textHeight; - } - } - else { - textTop = parentBottom - textHeight - (int) (parentHeight * bottomPaddingFraction); - textBottom = textTop + textHeight; - } - - textWidth = textRight - textLeft; - - // Update the derived drawing variables. - this.textLayout = new StaticLayout(cueText, textPaint, textWidth, textAlignment, - spacingMult, - spacingAdd, true); - this.textLeft = textLeft; - this.textTop = textTop; - this.textPaddingX = textPaddingX; - - drawLayout(canvas); - } - - /** - * Draws {@link #textLayout} into the provided canvas. - * - * @param canvas The canvas into which to draw. - */ - private void drawLayout(Canvas canvas) { - - final StaticLayout layout = textLayout; - if (layout == null) { - // Nothing to draw. - return; - } - - int saveCount = canvas.save(); - canvas.translate(textLeft, textTop); - - if (Color.alpha(windowColor) > 0) { - paint.setColor(windowColor); - canvas.drawRect(-textPaddingX, 0, layout.getWidth() + textPaddingX, layout.getHeight(), - paint); - } - - if (Color.alpha(backgroundColor) > 0) { - paint.setColor(backgroundColor); - float previousBottom = layout.getLineTop(0); - int lineCount = layout.getLineCount(); - for (int i = 0; i < lineCount; i++) { - lineBounds.left = layout.getLineLeft(i) - textPaddingX; - lineBounds.right = layout.getLineRight(i) + textPaddingX; - lineBounds.top = previousBottom; - lineBounds.bottom = layout.getLineBottom(i); - previousBottom = lineBounds.bottom; - canvas.drawRoundRect(lineBounds, cornerRadius, cornerRadius, paint); - } - } - - if (edgeType == CaptionStyleCompat.EDGE_TYPE_OUTLINE) { - textPaint.setStrokeJoin(Paint.Join.ROUND); - textPaint.setStrokeWidth(outlineWidth); - textPaint.setColor(edgeColor); - textPaint.setStyle(Paint.Style.FILL_AND_STROKE); - layout.draw(canvas); - } - else if (edgeType == CaptionStyleCompat.EDGE_TYPE_DROP_SHADOW) { - textPaint.setShadowLayer(shadowRadius, shadowOffset, shadowOffset, edgeColor); - } - else if (edgeType == CaptionStyleCompat.EDGE_TYPE_RAISED - || edgeType == CaptionStyleCompat.EDGE_TYPE_DEPRESSED) { - boolean raised = edgeType == CaptionStyleCompat.EDGE_TYPE_RAISED; - int colorUp = raised ? Color.WHITE : edgeColor; - int colorDown = raised ? edgeColor : Color.WHITE; - float offset = shadowRadius / 2f; - textPaint.setColor(foregroundColor); - textPaint.setStyle(Paint.Style.FILL); - textPaint.setShadowLayer(shadowRadius, -offset, -offset, colorUp); - layout.draw(canvas); - textPaint.setShadowLayer(shadowRadius, offset, offset, colorDown); - } - - textPaint.setColor(foregroundColor); - textPaint.setStyle(Paint.Style.FILL); - layout.draw(canvas); - textPaint.setShadowLayer(0, 0, 0, 0); - - canvas.restoreToCount(saveCount); - } - - /** - * This method is used instead of {@link TextUtils#equals(CharSequence, CharSequence)} because - * the latter only checks the text of each sequence, and does not check for equality of styling - * that may be embedded within the {@link CharSequence}s. - */ - private static boolean areCharSequencesEqual(CharSequence first, CharSequence second) { - // Some CharSequence implementations don't perform a cheap referential equality check in - // their equals methods, so we perform one explicitly here. - return first == second || (first != null && first.equals(second)); - } -} diff --git a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/SubtitleLayout.java b/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/SubtitleLayout.java deleted file mode 100644 index ef6cb08..0000000 --- a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/textrenderer/SubtitleLayout.java +++ /dev/null @@ -1,269 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.amazon.android.uamp.textrenderer; - -import com.amazon.android.uamp.constants.CaptionStyleCompat; -import com.amazon.mediaplayer.playback.text.Cue; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Canvas; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.View; - -import java.util.ArrayList; -import java.util.List; - -/** - * A view for rendering rich-formatted captions. - */ -public final class SubtitleLayout extends View { - - /** - * The default fractional text size. - * - * @see #setFractionalTextSize(float, boolean) - */ - private static final float DEFAULT_TEXT_SIZE_FRACTION = 0.0533f; - - /** - * The default bottom padding to apply when {@link Cue#line} is {@link Cue#DIMEN_UNSET}, as a - * fraction of the viewport height. - * - * @see #setBottomPaddingFraction(float) - */ - private static final float DEFAULT_BOTTOM_PADDING_FRACTION = 0.08f; - - private static final int FRACTIONAL = 0; - private static final int FRACTIONAL_IGNORE_PADDING = 1; - private static final int ABSOLUTE = 2; - - private final List painters; - - private List cues; - private int textSizeType; - private float textSize; - private boolean applyEmbeddedStyles; - private CaptionStyleCompat style; - private float bottomPaddingFraction; - - /** - * Constructor - * - * @param context Application context. - */ - public SubtitleLayout(Context context) { - - this(context, null); - } - - /** - * Constructor - * - * @param context Application context. - * @param attrs Attribute sets. - */ - public SubtitleLayout(Context context, AttributeSet attrs) { - - super(context, attrs); - painters = new ArrayList<>(); - textSizeType = FRACTIONAL; - textSize = DEFAULT_TEXT_SIZE_FRACTION; - applyEmbeddedStyles = true; - style = CaptionStyleCompat.DEFAULT; - bottomPaddingFraction = DEFAULT_BOTTOM_PADDING_FRACTION; - } - - /** - * Sets the cues to be displayed by the view. - * - * @param cues The cues to display. - */ - public void setCues(List cues) { - - if (this.cues == cues) { - return; - } - this.cues = cues; - // Ensure we have sufficient painters. - int cueCount = (cues == null) ? 0 : cues.size(); - while (painters.size() < cueCount) { - painters.add(new CuePainter(getContext())); - } - // Invalidate to trigger drawing. - invalidate(); - } - - /** - * Set the text size to a given unit and value. - *

    - * See {@link TypedValue} for the possible dimension units. - * - * @param unit The desired dimension unit. - * @param size The desired size in the given units. - */ - public void setFixedTextSize(int unit, float size) { - - Context context = getContext(); - Resources resources; - if (context == null) { - resources = Resources.getSystem(); - } - else { - resources = context.getResources(); - } - setTextSize(ABSOLUTE, TypedValue.applyDimension(unit, size, resources.getDisplayMetrics())); - } - - /** - * Sets the text size to be a fraction of the view's remaining height after its top and bottom - * padding have been subtracted. - *

    - * Equivalent to {@code #setFractionalTextSize(fractionOfHeight, false)}. - * - * @param fractionOfHeight A fraction between 0 and 1. - */ - public void setFractionalTextSize(float fractionOfHeight) { - - setFractionalTextSize(fractionOfHeight, false); - } - - /** - * Sets the text size to be a fraction of the height of this view. - * - * @param fractionOfHeight A fraction between 0 and 1. - * @param ignorePadding Set to true if {@code fractionOfHeight} should be interpreted as a - * fraction of this view's height ignoring any top and bottom padding. - * Set to false if - * {@code fractionOfHeight} should be interpreted as a fraction of this - * view's remaining - * height after the top and bottom padding has been subtracted. - */ - private void setFractionalTextSize(float fractionOfHeight, boolean ignorePadding) { - - setTextSize(ignorePadding ? FRACTIONAL_IGNORE_PADDING : FRACTIONAL, fractionOfHeight); - } - - private void setTextSize(int textSizeType, float textSize) { - - if (this.textSizeType == textSizeType && this.textSize == textSize) { - return; - } - this.textSizeType = textSizeType; - this.textSize = textSize; - // Invalidate to trigger drawing. - invalidate(); - } - - /** - * Sets whether styling embedded within the cues should be applied. Enabled by default. - * - * @param applyEmbeddedStyles Whether styling embedded within the cues should be applied. - */ - public void setApplyEmbeddedStyles(boolean applyEmbeddedStyles) { - - if (this.applyEmbeddedStyles == applyEmbeddedStyles) { - return; - } - this.applyEmbeddedStyles = applyEmbeddedStyles; - // Invalidate to trigger drawing. - invalidate(); - } - - /** - * Sets the caption style. - * - * @param style A style for the view. - */ - public void setStyle(CaptionStyleCompat style) { - - if (this.style == style) { - return; - } - this.style = style; - // Invalidate to trigger drawing. - invalidate(); - } - - /** - * Sets the bottom padding fraction to apply when {@link Cue#line} is {@link Cue#DIMEN_UNSET}, - * as a fraction of the view's remaining height after its top and bottom padding have been - * subtracted. - *

    - * Note that this padding is applied in addition to any standard view padding. - * - * @param bottomPaddingFraction The bottom padding fraction. - */ - public void setBottomPaddingFraction(float bottomPaddingFraction) { - - if (this.bottomPaddingFraction == bottomPaddingFraction) { - return; - } - this.bottomPaddingFraction = bottomPaddingFraction; - // Invalidate to trigger drawing. - invalidate(); - } - - /** - * {@inheritDoc} - */ - @Override - public void dispatchDraw(Canvas canvas) { - - int cueCount = (cues == null) ? 0 : cues.size(); - int rawTop = getTop(); - int rawBottom = getBottom(); - - // Calculate the bounds after padding is taken into account. - int left = getLeft() + getPaddingLeft(); - int top = rawTop + getPaddingTop(); - int right = getRight() + getPaddingRight(); - int bottom = rawBottom - getPaddingBottom(); - if (bottom <= top || right <= left) { - // No space to draw subtitles. - return; - } - - float textSizePx = textSizeType == ABSOLUTE ? textSize - : textSize * (textSizeType == FRACTIONAL ? (bottom - top) : (rawBottom - rawTop)); - if (textSizePx <= 0) { - // Text has no height. - return; - } - - for (int i = 0; i < cueCount; i++) { - painters.get(i).draw(cues.get(i), applyEmbeddedStyles, style, textSizePx, - bottomPaddingFraction, canvas, left, top, right, bottom); - } - } - -} diff --git a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/ui/PlaybackActivity.java b/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/ui/PlaybackActivity.java index f87adb2..de5355a 100755 --- a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/ui/PlaybackActivity.java +++ b/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/ui/PlaybackActivity.java @@ -30,24 +30,23 @@ package com.amazon.android.uamp.ui; +import com.google.android.exoplayer.text.SubtitleLayout; + import com.amazon.ads.IAds; +import com.amazon.ads.AdMetaData; import com.amazon.analytics.AnalyticsTags; import com.amazon.android.contentbrowser.ContentBrowser; import com.amazon.android.contentbrowser.database.ContentDatabaseHelper; import com.amazon.android.contentbrowser.database.RecentRecord; import com.amazon.android.contentbrowser.helper.AnalyticsHelper; -import com.amazon.android.contentbrowser.helper.AuthHelper; import com.amazon.android.model.content.Content; import com.amazon.android.module.ModuleManager; -import com.amazon.android.navigator.Navigator; -import com.amazon.android.navigator.UINode; import com.amazon.android.recipe.Recipe; import com.amazon.android.tv.tenfoot.R; import com.amazon.android.uamp.DrmProvider; import com.amazon.android.uamp.UAMP; import com.amazon.android.uamp.constants.PreferencesConstants; -import com.amazon.android.uamp.textrenderer.SubtitleLayout; import com.amazon.android.ui.fragments.ErrorDialogFragment; import com.amazon.android.utils.ErrorUtils; import com.amazon.android.utils.Helpers; @@ -78,6 +77,7 @@ import android.widget.FrameLayout; import android.widget.ProgressBar; +import java.util.ArrayList; import java.util.List; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; @@ -138,9 +138,14 @@ public class PlaybackActivity extends Activity implements private boolean mIsCloseCaptionEnabled = false; /** - * Is Content support close caption flag. + * Is Content support outband close caption flag. + */ + private boolean mHasOutbandCC = false; + + /** + * Is activity onResume is being received at activity created. */ - private boolean mIsContentSupportCC = false; + private boolean resumeOnCreation = false; enum AudioFocusState { Focused, @@ -176,6 +181,8 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + //flag for onResume to know this is being called at activity creation + resumeOnCreation = true; // Create video position tracking handler. mVideoPositionTrackingHandler = new Handler(); @@ -258,9 +265,9 @@ protected void onStart() { } /** - * resume Playback Activity if user Authentication is success + * resume Playback Activity */ - private void resumePlaybackAfterAuthentication() { + private void resumePlayback() { // Start tracking video position changes. mVideoPositionTrackingHandler.post(mVideoPositionTrackingRunnable); @@ -305,61 +312,12 @@ private void resumePlaybackAfterAuthentication() { break; } - long duration = getDuration(); - // Duration wasn't found using the player, try getting it directly from the content. - if (duration == 0) { - duration = mSelectedContent.getDuration(); - } - AnalyticsHelper.trackPlaybackStarted(mSelectedContent, duration, mCurrentPlaybackPosition); - // Let ads implementation track player activity lifecycle. if (mAdsImplementation != null) { mAdsImplementation.setActivityState(IAds.ActivityState.RESUME); } } - /** - * Authenticate User On Resume of PlayBackActivity. - * - * @param screenName Screen name - */ - private void authenticateUserOnResume(String screenName) { - - Navigator mNavigator = ContentBrowser.getInstance(this).getNavigator(); - AuthHelper mAuthHelper = ContentBrowser.getInstance(this).getAuthHelper(); - UINode uiNode = (UINode) mNavigator.getNodeObjectByScreenName(screenName); - Log.d(TAG, "AuthenticateUserOnResume called in:" + screenName); - Log.d(TAG, "AuthenticateUserOnResume needed:" + uiNode.isVerifyScreenAccess()); - //check if this Screen need Access verification - if (uiNode.isVerifyScreenAccess()) { - boolean loginLater = Preferences.getBoolean(AuthHelper.LOGIN_LATER_PREFERENCES_KEY); - //Check if Authentication can be deferred or not - if (!mAuthHelper.getIAuthentication().isAuthenticationCanBeDoneLater() || - (!loginLater && mAuthHelper.getIAuthentication() - .isAuthenticationCanBeDoneLater())) { - //Check if user is Authenticated for the content - mAuthHelper.isAuthenticated().subscribe(extras -> { - if (extras.getBoolean(AuthHelper.RESULT)) { - //Playback activity need to be resumed as Authentication succeeded. - resumePlaybackAfterAuthentication(); - } - else { - //Playback activity need to be closed as Authentication failed. - finish(); - Log.i(TAG, "Traversing to details page since user is not authenticated " + - "any more"); - } - }); - } - else { - resumePlaybackAfterAuthentication(); - } - } - else { - resumePlaybackAfterAuthentication(); - } - } - /** * {@inheritDoc} */ @@ -367,9 +325,22 @@ private void authenticateUserOnResume(String screenName) { public void onResume() { super.onResume(); + // TODO: Move this handling from here to content browser after refactoring + // VerifyScreenSwitch DEVTECH-4038 + //Check before resume as user might not authenticated any more. One such scenario is // coming back from next/prev screen when user account has been disabled from server. - authenticateUserOnResume(ContentBrowser.CONTENT_RENDERER_SCREEN); + if (resumeOnCreation) { + resumeOnCreation = false; + resumePlayback(); + } + else { + ContentBrowser.getInstance(this).verifyScreenSwitch(ContentBrowser + .CONTENT_RENDERER_SCREEN, + extra -> + resumePlayback(), + errorExtra -> finish()); + } } /** @@ -581,6 +552,10 @@ public int getDuration() { duration = 0; } } + // Duration wasn't found using the player, try getting it directly from the content. + if (duration == 0 && mSelectedContent != null) { + duration = mSelectedContent.getDuration(); + } return (int) duration; } @@ -660,9 +635,6 @@ public void changeContent(Content content) { loadContentPlaybackState(); mStartingPlaybackPosition = mCurrentPlaybackPosition; - // User will start watching this new content so track it with analytics. - AnalyticsHelper.trackPlaybackStarted(mSelectedContent, mStartingPlaybackPosition, - mCurrentPlaybackPosition); if (mPlayer != null) { mPlayer.close(); @@ -763,18 +735,31 @@ public void onFragmentFfwRwd(int position) { @Override public void onCloseCaptionButtonStateChanged(boolean state) { + modifyClosedCaptionState(state); + } + + public void modifyClosedCaptionState(boolean state) { + if (mPlayer != null && mPlaybackOverlayFragment != null) { - if (mIsContentSupportCC) { - // Enable CC. - mPlayer.enableTextTrack(TrackType.SUBTITLE, state); + if (isClosedCaptionAvailable()) { + + // Enable CC. Prioritizing CLOSED_CAPTION before SUBTITLE if enabled + if (ContentBrowser.getInstance(this).isEnableCEA608() && + mPlayer.getTrackCount(TrackType.CLOSED_CAPTION) > 0) { + mPlayer.enableTextTrack(TrackType.CLOSED_CAPTION, state); + } + else { + mPlayer.enableTextTrack(TrackType.SUBTITLE, state); + } + // Update internal state. mIsCloseCaptionEnabled = state; - mPlaybackOverlayFragment.updateCCButtonState(state, mIsContentSupportCC); + mPlaybackOverlayFragment.updateCCButtonState(state, true); Log.d(TAG, "Content support CC. Change CC state to " + state); } else { // Disable CC button back. - mPlaybackOverlayFragment.updateCCButtonState(false, mIsContentSupportCC); + mPlaybackOverlayFragment.updateCCButtonState(false, false); // Do not disable mIsCloseCaptionEnabled as we want it persistent. Log.d(TAG, "Content does not support CC. Change CC state to false"); } @@ -822,7 +807,7 @@ private void setVisibilityOfViewGroupWithInnerSurfaceView(ViewGroup viewGroup, i } } - private void switch2VideoView() { + private void switchToVideoView() { // Show Video view. setVisibilityOfViewGroupWithInnerSurfaceView(mVideoView, View.VISIBLE); // Show Subtitle view. @@ -831,7 +816,7 @@ private void switch2VideoView() { setVisibilityOfViewGroupWithInnerSurfaceView(mAdsView, View.GONE); } - private void switch2AdsView() { + private void switchToAdsView() { // Show Ads view. setVisibilityOfViewGroupWithInnerSurfaceView(mAdsView, View.VISIBLE); // Hide Video view. @@ -1097,8 +1082,45 @@ private void clearPlayerCallbacks() { */ @Override public void onCues(List cues) { + // Unfortunately need to convert again as interface is player agnostic. + final List convertedCues = new ArrayList<>(); + com.google.android.exoplayer.text.Cue aCue; + for (com.amazon.mediaplayer.playback.text.Cue cue : cues) { + aCue = new com.google.android.exoplayer.text.Cue(cue.text, + cue.textAlignment, + cue.line, + cue.lineType, + cue.lineAnchor, + cue.position, + cue.positionAnchor, + cue.size); + convertedCues.add(aCue); + } + mSubtitleLayout.setCues(convertedCues); + } + + /** + * Create and return AdMetaData object from extras received from ad module, + * consumer of this object is Analytics module + * + * @param extras Bundle containing ad metadata + * @return POJO with ad metadata + */ + private AdMetaData getAdAnalyticsData(Bundle extras) { - mSubtitleLayout.setCues(cues); + AdMetaData adMetaData = new AdMetaData(); + if (extras != null) { + if (extras.getString(IAds.ID) != null) { + adMetaData.setAdId(extras.getString(IAds.ID)); + } + if (extras.getString(IAds.AD_TYPE) != null) { + adMetaData.setAdType(extras.getString(IAds.AD_TYPE)); + } + adMetaData.setDurationReceived(extras.getLong(IAds.DURATION_RECEIVED)); + adMetaData.setDurationPlayed(extras.getLong(IAds.DURATION_PLAYED)); + Log.d(TAG, "Ad details: " + adMetaData.toString()); + } + return adMetaData; } private IAds.IAdsEvents mIAdsEvents = new IAds.IAdsEvents() { @@ -1106,7 +1128,7 @@ public void onCues(List cues) { public void onAdSlotStarted(Bundle extras) { Log.d(TAG, "onAdSlotStarted"); - AnalyticsHelper.trackAdStarted(mSelectedContent, getCurrentPosition()); + // Hide media controller. if (mPlaybackOverlayFragment != null && mPlaybackOverlayFragment.getView() != null) { mPlaybackOverlayFragment.getView().setVisibility(View.INVISIBLE); @@ -1115,51 +1137,66 @@ public void onAdSlotStarted(Bundle extras) { // Pause the video if we are already playing a content. if (mPlayer != null && isPlaying()) { mPlayer.pause(); + mCurrentPlaybackPosition = getCurrentPosition(); + AnalyticsHelper.trackPlaybackFinished(mSelectedContent, mStartingPlaybackPosition, + mCurrentPlaybackPosition); + mStartingPlaybackPosition = mCurrentPlaybackPosition; } - // Hide progress bar. hideProgress(); - // Show Ads view. - switch2AdsView(); + AnalyticsHelper.trackAdStarted(mSelectedContent, getCurrentPosition(), + getAdAnalyticsData(extras)); + switchToAdsView(); } @Override public void onAdSlotEnded(final Bundle extras) { Log.d(TAG, "onAdSlotEnded"); - // Show progress - showProgress(); - // Show video View. - switch2VideoView(); - // Will be used for Analytics. - long duration = 0; + // If the extra doesn't exist then we'll treat this with a default value of true. + boolean adPodComplete = extras == null || !extras.containsKey(IAds.AD_POD_COMPLETE) || + extras.getBoolean(IAds.AD_POD_COMPLETE); + + // We only want to show the video view if the group of ads has finished playing. + if (adPodComplete) { + showProgress(); + switchToVideoView(); + } + + AnalyticsHelper.trackAdEnded(mSelectedContent, getCurrentPosition(), + getAdAnalyticsData(extras)); + + String adType = null; if (extras != null) { - duration = extras.getLong(IAds.DURATION); - boolean wasAMidRoll = extras.getBoolean(IAds.WAS_A_MID_ROLL); - if (wasAMidRoll) { + adType = extras.getString(IAds.AD_TYPE); + } + + if (adType != null && adType.equals(IAds.MID_ROLL_AD)) { + + // Show the playback overlay and continue playing the video if the group of + // ads has finished playing. + if (adPodComplete) { // Show media controller. - if (mPlaybackOverlayFragment != null && mPlaybackOverlayFragment.getView() != - null) { + if (mPlaybackOverlayFragment != null + && mPlaybackOverlayFragment.getView() != null) { mPlaybackOverlayFragment.getView().setVisibility(View.VISIBLE); } // Resume movie after a mid roll. mPlayer.play(); } - else { - // Open Movie. - openContentHelper(mSelectedContent); - } - - Log.d(TAG, "Ad Played for " + duration + " ms"); + } + // If we came back from a post-roll ad that means the content is finished. + else if (adType != null && adType.equals(IAds.POST_ROLL_AD)) { + playbackFinished(); } else { // Open Movie. openContentHelper(mSelectedContent); } - AnalyticsHelper.trackAdEnded(mSelectedContent, duration, getCurrentPosition()); } + }; /** @@ -1211,7 +1248,7 @@ private void openContentHelper(Content content) { } } - mIsContentSupportCC = false; + mHasOutbandCC = false; AMZNMediaPlayer.TextMimeType ccType = AMZNMediaPlayer.TextMimeType.TEXT_WTT; List closeCaptionUrls = content.getCloseCaptionUrls(); @@ -1232,12 +1269,12 @@ private void openContentHelper(Content content) { if (lastDot > 0) { String ext = closeCaptionUrl.substring(lastDot + 1); if (ext.equals("vtt")) { - mIsContentSupportCC = true; + mHasOutbandCC = true; ccType = AMZNMediaPlayer.TextMimeType.TEXT_WTT; Log.d(TAG, "Close captioning is enabled & its format is TextWTT"); } else if (ext.equals("xml")) { - mIsContentSupportCC = true; + mHasOutbandCC = true; ccType = AMZNMediaPlayer.TextMimeType.TEXT_TTML; Log.d(TAG, "Close captioning is enabled & its format is TextTTML"); } @@ -1245,9 +1282,6 @@ else if (ext.equals("xml")) { } if (mPlaybackOverlayFragment != null) { - mPlaybackOverlayFragment.updateCCButtonState(mIsContentSupportCC && - mIsCloseCaptionEnabled, - mIsContentSupportCC); mPlaybackOverlayFragment.updateCurrentContent(mSelectedContent); } @@ -1259,16 +1293,15 @@ else if (ext.equals("xml")) { contentParameters.laurl = drmProvider.fetchLaUrl(); contentParameters.encryptionSchema = getAmznMediaEncryptionSchema(drmProvider); - if (mIsContentSupportCC) { - + if (mHasOutbandCC) { contentParameters.oobTextSources = new AMZNMediaPlayer.OutOfBandTextSource[]{new AMZNMediaPlayer.OutOfBandTextSource(closeCaptionUrl, ccType, "en")}; mPlayer.open(contentParameters); - Log.d(TAG, "Media player opened with close captioning support"); + Log.d(TAG, "Media player opened with outband close captioning support"); } else { mPlayer.open(contentParameters); - Log.d(TAG, "Media player opened without close captioning support"); + Log.d(TAG, "Media player opened without outband close captioning support"); } } @@ -1302,7 +1335,7 @@ private void openSelectedContent() { mAdsImplementation.setIAdsEvents(mIAdsEvents); // Hide videoView which make adsView visible. - switch2AdsView(); + switchToAdsView(); // Hide media controller. if (mPlaybackOverlayFragment != null && mPlaybackOverlayFragment.getView() != null) { @@ -1374,15 +1407,6 @@ public void onPlayerStateChange(PlayerState oldState, PlayerState newState, Bund else { mIsContentChangeRequested = false; } - // Remember CC state for playbacks. - if (mIsContentSupportCC && mIsCloseCaptionEnabled) { - if (mPlaybackOverlayFragment != null) { - mPlaybackOverlayFragment.updateCCButtonState(true, true); - } - if (mPlayer != null) { - mPlayer.enableTextTrack(TrackType.SUBTITLE, true); - } - } break; case PREPARING: // Show media controller. @@ -1400,6 +1424,9 @@ public void onPlayerStateChange(PlayerState oldState, PlayerState newState, Bund mWindow.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); if (mPrevState == PlayerState.PREPARING) { if (mPlaybackOverlayFragment != null) { + // Remember CC state for playbacks. + modifyClosedCaptionState(mIsCloseCaptionEnabled); + mPlaybackOverlayFragment.updatePlayback(); mPlaybackOverlayFragment.startProgressAutomation(); } @@ -1437,6 +1464,11 @@ else if (mAudioFocusState == AudioFocusState.NoFocusNoDuck) { if (mAdsImplementation != null) { mAdsImplementation.setPlayerState(IAds.PlayerState.PLAYING); } + if (mCurrentPlaybackPosition < getCurrentPosition()) { + mCurrentPlaybackPosition = getCurrentPosition(); + } + AnalyticsHelper.trackPlaybackStarted(mSelectedContent, getDuration(), + mCurrentPlaybackPosition); break; case BUFFERING: showProgress(); @@ -1449,15 +1481,15 @@ else if (mAudioFocusState == AudioFocusState.NoFocusNoDuck) { break; case ENDED: hideProgress(); - if (mPlaybackOverlayFragment != null) { - mPlaybackOverlayFragment.playbackFinished(); - } - mWindow.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - // Let ads implementation track player state. - if (mAdsImplementation != null) { + // Let ads implementation track player state and check for any post-roll ads. + if (mAdsImplementation != null && mAdsImplementation.isPostRollAvailable()) { mAdsImplementation.setPlayerState(IAds.PlayerState.COMPLETED); } + // If there's no ads just directly finish playback. + else { + playbackFinished(); + } + break; case CLOSING: if (mPlaybackOverlayFragment != null) { @@ -1475,6 +1507,18 @@ else if (mAudioFocusState == AudioFocusState.NoFocusNoDuck) { } } + /** + * Private helper method to do some cleanup when playback has finished. + */ + private void playbackFinished() { + + if (mPlaybackOverlayFragment != null) { + mPlaybackOverlayFragment.playbackFinished(); + } + mWindow.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + + /** * {@inheritDoc} */ @@ -1603,4 +1647,20 @@ public void doButtonClick(ErrorDialogFragment errorDialogFragment, ErrorUtils } } + + public boolean isClosedCaptionAvailable() { + + if (mPlayer.getTrackCount(TrackType.SUBTITLE) > 0) { + Log.d(TAG, "Subtitle Tracks Available: " + mPlayer.getTrackCount(TrackType.SUBTITLE)); + return true; + } + else if (ContentBrowser.getInstance(this).isEnableCEA608() && + mPlayer.getTrackCount(TrackType.CLOSED_CAPTION) > 0) { + Log.d(TAG, "Closed Caption Tracks Available: " + mPlayer.getTrackCount(TrackType.CLOSED_CAPTION)); + return true; + } + else { + return false; + } + } } diff --git a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/ui/PlaybackOverlayFragment.java b/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/ui/PlaybackOverlayFragment.java index de6f2d1..c3a5684 100755 --- a/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/ui/PlaybackOverlayFragment.java +++ b/TVUIComponent/lib/src/main/java/com/amazon/android/uamp/ui/PlaybackOverlayFragment.java @@ -370,7 +370,9 @@ else if (action.getId() == mSkipNextAction.getId()) { trackAnalyticsAction(AnalyticsTags.ACTION_PLAYBACK_CONTROL_NEXT); ContentBrowser.getInstance(getActivity()).verifyScreenSwitch(ContentBrowser .CONTENT_RENDERER_SCREEN, extra -> - next()); + next(), + errorExtra -> + ContentBrowser.getInstance(getActivity()).showAuthenticationErrorDialog(errorExtra)); } else if (action.getId() == mClosedCaptioningAction.getId()) { toggleCloseCaption(); @@ -380,7 +382,9 @@ else if (action.getId() == mSkipPreviousAction.getId()) { trackAnalyticsAction(AnalyticsTags.ACTION_PLAYBACK_CONTROL_PRE); ContentBrowser.getInstance(getActivity()).verifyScreenSwitch(ContentBrowser .CONTENT_RENDERER_SCREEN, extra -> - prev()); + prev(), + errorExtra -> + ContentBrowser.getInstance(getActivity()).showAuthenticationErrorDialog(errorExtra)); } else if (action.getId() == mFastForwardAction.getId()) { fastForward(); @@ -940,7 +944,10 @@ public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, ContentBrowser.getInstance(getActivity()).verifyScreenSwitch(ContentBrowser .CONTENT_RENDERER_SCREEN, extra -> - mCallback.changeContent(content)); + mCallback + .changeContent(content), + errorExtra -> + ContentBrowser.getInstance(getActivity()).showAuthenticationErrorDialog(errorExtra)); } } } diff --git a/UAMP/build.gradle b/UAMP/build.gradle index 93afc46..0c99570 100644 --- a/UAMP/build.gradle +++ b/UAMP/build.gradle @@ -48,6 +48,8 @@ jacoco { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) + compile files('libs/exoplayer.jar') + compile 'com.android.support:recyclerview-v7:23.1.1' compile 'com.android.support:leanback-v17:23.1.1' compile 'com.android.support:appcompat-v7:23.1.1' diff --git a/AMZNMediaPlayerComponent/libs/exoplayer.jar b/UAMP/libs/exoplayer.jar similarity index 100% rename from AMZNMediaPlayerComponent/libs/exoplayer.jar rename to UAMP/libs/exoplayer.jar diff --git a/UAMP/src/main/res/layout/playback_controls.xml b/UAMP/src/main/res/layout/playback_controls.xml index 88ee779..115a468 100644 --- a/UAMP/src/main/res/layout/playback_controls.xml +++ b/UAMP/src/main/res/layout/playback_controls.xml @@ -46,7 +46,7 @@ permissions and limitations under the License. android:layout_gravity="center" android:layout_centerInParent="true"> - diff --git a/Utils/src/androidTest/assets/LoadArrayMappingTest1.json b/Utils/src/androidTest/assets/LoadArrayMappingTest1.json new file mode 100644 index 0000000..c76ad88 --- /dev/null +++ b/Utils/src/androidTest/assets/LoadArrayMappingTest1.json @@ -0,0 +1,9 @@ +{ + "strings":["value1", "value2"], + "integers": [4, 7, 13], + "booleans": [true, false], + "emptyObjects": [{} , {}], + "emptyLists": [[],[], []], + "objects": [{"innerKey1":"innerValue1"}, {"innerKey2":"innerValue2"}, {"innerKey3":"innerValue3"}], + "lists": [[1, 2, 3], [4, 5, 6], [13, 16, 20]] +} \ No newline at end of file diff --git a/Utils/src/androidTest/java/com/amazon/android/utils/HelpersTest.java b/Utils/src/androidTest/java/com/amazon/android/utils/HelpersTest.java deleted file mode 100644 index 87eadee..0000000 --- a/Utils/src/androidTest/java/com/amazon/android/utils/HelpersTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -package com.amazon.android.utils; - - -import com.amazon.utils.test.R; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; -import android.util.Log; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.util.HashMap; -import java.util.Map; - -/** - * Tests the {@link Helpers} class. - */ -@RunWith(AndroidJUnit4.class) - -public class HelpersTest { - - private static final String TAG = HelpersTest.class.getSimpleName(); - - /** - * Tests the {@link Helpers#loadStringMappingFromJsonFile(Context, int)} method for the - * positive case. - */ - @Test - public void testLoadStringMappingFromJsonFilePositive() { - - HashMap result = - Helpers.loadStringMappingFromJsonFile(InstrumentationRegistry.getContext(), - R.string.load_string_mapping_test1_file); - - assertEquals("There should be 4 key-value pairs in the map", 7, result.size()); - - assertEquals("value", result.get("string")); - assertEquals("4", result.get("integer")); - assertEquals("true", result.get("boolean")); - assertEquals("{}", result.get("emptyObject")); - assertEquals("[]", result.get("emptyList")); - assertEquals("{innerKey=innerValue}", result.get("object")); - assertEquals("[1, 2, 3]", result.get("list")); - } - - /** - * Tests the {@link Helpers#loadStringMappingFromJsonFile(Context, int)} method for the case - * if a non-existent file is provided. - */ - @Test - public void testLoadStringMappingFromJsonFileNegative() { - - Map result = Helpers.loadStringMappingFromJsonFile(InstrumentationRegistry.getContext(), - R.string.non_existent_file); - assertNotNull(result); - assertEquals("Expecting an empty map if using a non-existent file", 0, result.size()); - } -} \ No newline at end of file diff --git a/Utils/src/androidTest/java/com/amazon/android/utils/MapHelperTest.java b/Utils/src/androidTest/java/com/amazon/android/utils/MapHelperTest.java new file mode 100644 index 0000000..698b076 --- /dev/null +++ b/Utils/src/androidTest/java/com/amazon/android/utils/MapHelperTest.java @@ -0,0 +1,196 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.utils; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNotNull; + +/** + * Tests the {@link MapHelper} class. + */ +@SuppressWarnings("unchecked") +@RunWith(AndroidJUnit4.class) + +public class MapHelperTest { + + private static final String TAG = MapHelperTest.class.getSimpleName(); + + /** + * Tests the {@link MapHelper#loadStringMappingFromJsonFile(Context, int)} method for the + * positive case. + */ + @Test + public void testLoadStringMappingFromJsonFilePositive() { + + HashMap result = + MapHelper.loadStringMappingFromJsonFile(InstrumentationRegistry.getContext(), + com.amazon.utils.test.R.string + .load_string_mapping_test1_file); + + assertEquals("There should be 7 key-value pairs in the map", 7, result.size()); + + assertEquals("value", result.get("string")); + assertEquals("4", result.get("integer")); + assertEquals("true", result.get("boolean")); + assertEquals("{}", result.get("emptyObject")); + assertEquals("[]", result.get("emptyList")); + assertEquals("{innerKey=innerValue}", result.get("object")); + assertEquals("[1, 2, 3]", result.get("list")); + } + + /** + * Tests the {@link MapHelper#loadStringMappingFromJsonFile(Context, int)} method for the case + * if a non-existent file is provided. + */ + @Test + public void testLoadStringMappingFromJsonFileNegative() { + + Map result = MapHelper.loadStringMappingFromJsonFile(InstrumentationRegistry.getContext(), + com.amazon.utils.test.R.string + .non_existent_file); + assertNotNull(result); + assertEquals("Expecting an empty map if using a non-existent file", 0, result.size()); + } + + /** + * create requested HashMap + * + * @param key of map + * @param value of map + * @return return map with given key and value + */ + Map getHashMap(String key, String value) { + + Map map = new HashMap<>(); + map.put(key, value); + return map; + } + + /** + * Inner class to provide generic implementation of HashSet + */ + private class TestHashSet { + + private HashSet testSet = new HashSet<>(); + + public void add(T... values) { + + testSet.addAll(Arrays.asList(values)); + } + + public HashSet get() { + + return testSet; + } + } + + /** + * create requested test HashSet + * + * @param type Type of object + * @return return HashSet for test + */ + private TestHashSet getTestHashSetObject(String type) { + + switch (type) { + case "strings": + TestHashSet t1 = new TestHashSet<>(); + t1.add("value1", "value2"); + return t1; + case "integers": + TestHashSet t2 = new TestHashSet<>(); + t2.add(4, 7, 13); + return t2; + case "booleans": + TestHashSet t3 = new TestHashSet<>(); + t3.add(true, false); + return t3; + case "emptyObjects": + TestHashSet t4 = new TestHashSet<>(); + t4.add(new HashMap()); + return t4; + case "emptyLists": + TestHashSet t5 = new TestHashSet<>(); + t5.add(new ArrayList()); + return t5; + case "objects": + TestHashSet> t6 = new TestHashSet<>(); + t6.add(getHashMap("innerKey1", "innerValue1"), + getHashMap("innerKey2", "innerValue2"), + getHashMap("innerKey3", "innerValue3")); + return t6; + case "lists": + TestHashSet> t7 = new TestHashSet<>(); + List l1 = Arrays.asList(1, 2, 3); + List l2 = Arrays.asList(4, 5, 6); + List l3 = Arrays.asList(13, 16, 20); + t7.add(l1, l2, l3); + return t7; + } + return new TestHashSet<>(); + } + + /** + * Tests the {@link MapHelper#loadArrayMappingFromJsonFile(Context, int)} method for the + * positive case. + */ + @Test + public void testLoadArrayMappingFromJsonFilePositive() { + + HashMap> result = + MapHelper.loadArrayMappingFromJsonFile(InstrumentationRegistry.getContext(), + com.amazon.utils.test.R.string + .load_array_mapping_test1_file); + + assertEquals("There should be 7 key-value pairs in the map", 7, result.size()); + + assertTrue(getTestHashSetObject("strings").get().equals(result.get("strings"))); + assertTrue(getTestHashSetObject("integers").get().equals(result.get("integers"))); + assertTrue(getTestHashSetObject("booleans").get().equals(result.get("booleans"))); + assertTrue(getTestHashSetObject("emptyObjects").get().equals(result.get("emptyObjects"))); + assertTrue(getTestHashSetObject("emptyLists").get().equals(result.get("emptyLists"))); + assertTrue(getTestHashSetObject("objects").get().equals(result.get("objects"))); + assertTrue(getTestHashSetObject("lists").get().equals(result.get("lists"))); + } + + /** + * Tests the {@link MapHelper#loadArrayMappingFromJsonFile(Context, int)} method for the case + * if a non-existent file is provided. + */ + @Test + public void testLoadArrayMappingFromJsonFileNegative() { + + Map result = MapHelper.loadArrayMappingFromJsonFile(InstrumentationRegistry.getContext(), + com.amazon.utils.test.R.string + .non_existent_file); + assertNotNull(result); + assertEquals("Expecting an empty map if using a non-existent file", 0, result.size()); + } +} \ No newline at end of file diff --git a/Utils/src/androidTest/java/com/amazon/android/utils/NetworkUtilsTest.java b/Utils/src/androidTest/java/com/amazon/android/utils/NetworkUtilsTest.java index bc6677d..093cf45 100644 --- a/Utils/src/androidTest/java/com/amazon/android/utils/NetworkUtilsTest.java +++ b/Utils/src/androidTest/java/com/amazon/android/utils/NetworkUtilsTest.java @@ -104,6 +104,8 @@ public void testAddParameterToUrl() throws Exception { ".php?app_id=257&app_key=0ojbgtfcsq12&action" + "=channels_videos&newparam=differentvalue"; + String url5 = "http://www.someurlwithoutaquery.com"; + String param = "newparam"; String value = "value1"; @@ -132,5 +134,8 @@ public void testAddParameterToUrl() throws Exception { // Test adding a new parameter to url that already contains the parameter. assertEquals("value1 should not have been added.", expected3, NetworkUtils.addParameterToUrl(url4, param, value)); + // Test adding a new parameter to a url that doesn't have a query. + assertEquals("value1 should not have been added.", + url5, NetworkUtils.addParameterToUrl(url5, param, value)); } } diff --git a/Utils/src/androidTest/java/com/amazon/utils/DateAndTimeHelperTest.java b/Utils/src/androidTest/java/com/amazon/utils/DateAndTimeHelperTest.java new file mode 100644 index 0000000..723dd98 --- /dev/null +++ b/Utils/src/androidTest/java/com/amazon/utils/DateAndTimeHelperTest.java @@ -0,0 +1,42 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.utils; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +/** + * Tests the {@link DateAndTimeHelper} class. + */ +public class DateAndTimeHelperTest { + + /** + * Tests the {@link DateAndTimeHelper#convertDateFormatToSeconds(String)} method. + */ + @Test + public void testConvertTimeOffsetFromDateFormat() throws Exception { + + assertTrue(60 == DateAndTimeHelper.convertDateFormatToSeconds("00:01:00.000")); + assertTrue(0 == DateAndTimeHelper.convertDateFormatToSeconds("00:00:00.000")); + assertTrue(10 == DateAndTimeHelper.convertDateFormatToSeconds("00:00:10.000")); + assertTrue(100 == DateAndTimeHelper.convertDateFormatToSeconds("00:01:40.000")); + assertTrue(0 == DateAndTimeHelper.convertDateFormatToSeconds("00:00:00.100")); + assertTrue(36000 == DateAndTimeHelper.convertDateFormatToSeconds("10:00:00.000")); + assertTrue(60 == DateAndTimeHelper.convertDateFormatToSeconds("00:01:00")); + assertTrue(-1 == DateAndTimeHelper.convertDateFormatToSeconds("00:00:0000")); + assertTrue(360000 == DateAndTimeHelper.convertDateFormatToSeconds("100:00:00")); + } +} diff --git a/Utils/src/androidTest/res/values/strings.xml b/Utils/src/androidTest/res/values/strings.xml index 9e062f9..49ad81d 100644 --- a/Utils/src/androidTest/res/values/strings.xml +++ b/Utils/src/androidTest/res/values/strings.xml @@ -14,5 +14,6 @@ permissions and limitations under the License. --> LoadStringMappingTest1.json + LoadArrayMappingTest1.json FakeFile \ No newline at end of file diff --git a/Utils/src/main/java/com/amazon/android/navigator/NavigatorModel.java b/Utils/src/main/java/com/amazon/android/navigator/NavigatorModel.java index 40f5ef9..4a05723 100644 --- a/Utils/src/main/java/com/amazon/android/navigator/NavigatorModel.java +++ b/Utils/src/main/java/com/amazon/android/navigator/NavigatorModel.java @@ -83,6 +83,11 @@ public class Config { */ public String searchAlgo; + /** + * Enable CEA-608 closed caption flag. If enabled, we prioritize CEA-608 captions. + */ + public boolean enableCEA608 = false; + /** * The number of global recommendations that the app should send; assuming there are * global recommendation recipes available. diff --git a/Utils/src/main/java/com/amazon/android/utils/Helpers.java b/Utils/src/main/java/com/amazon/android/utils/Helpers.java index b03999e..74ae69f 100644 --- a/Utils/src/main/java/com/amazon/android/utils/Helpers.java +++ b/Utils/src/main/java/com/amazon/android/utils/Helpers.java @@ -45,8 +45,6 @@ import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.Date; -import java.util.HashMap; -import java.util.Map; /** * A collection of utility methods, all static. @@ -302,42 +300,6 @@ public static Charset getDefaultAppCharset() { } } - /** - * Load a map of strings for the given JSON file. The file should be formatted as a flat - * object with string key, value pairs, e.g.: - * - * { - * "Key1", "Value1", - * "Key2", "Value2" - * } - * - * @param context Context. - * @param fileNameId File name ID of the file to read from. - * @return The JSON file parsed as a map of strings. If there was an error while reading the - * file such as the file not existing, an empty map is returned and the error is logged. - */ - public static HashMap loadStringMappingFromJsonFile(Context context, - int fileNameId) { - - HashMap result = new HashMap<>(); - String fileName = context.getString(fileNameId); - try { - if (FileHelper.doesFileExist(context, fileName)) { - String fileData = FileHelper.readFile(context, fileName); - Map map = JsonHelper.stringToMap(fileData); - - for (Object key : map.keySet()) { - result.put((String) key, String.valueOf(map.get(key))); - } - } - } - catch (Exception e) { - Log.w(TAG, "Unable to read file " + fileName, e); - } - - return result; - } - /** * Check that console output contains the specified text * diff --git a/Utils/src/main/java/com/amazon/android/utils/MapHelper.java b/Utils/src/main/java/com/amazon/android/utils/MapHelper.java new file mode 100644 index 0000000..2dfc098 --- /dev/null +++ b/Utils/src/main/java/com/amazon/android/utils/MapHelper.java @@ -0,0 +1,115 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.android.utils; + +import android.content.Context; +import android.util.Log; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +/** + * A collection of static utility methods to create maps from different sources like Json file. + */ +public class MapHelper { + + private static final String TAG = MapHelper.class.getSimpleName(); + public static final boolean DEBUG = false; + + /** + * Making sure public utility methods remain static. + */ + private MapHelper() { + + } + + /** + * Load a map of strings for the given JSON file. The file should be formatted as a flat + * object with string key, value pairs, e.g.: + * + * { + * "Key1", "Value1", + * "Key2", "Value2" + * } + * + * @param context Context. + * @param fileNameId File name ID of the file to read from. + * @return The JSON file parsed as a map of strings. If there was an error while reading the + * file such as the file not existing, an empty map is returned and the error is logged. + */ + public static HashMap loadStringMappingFromJsonFile(Context context, + int fileNameId) { + + HashMap result = new HashMap<>(); + String fileName = context.getString(fileNameId); + try { + if (FileHelper.doesFileExist(context, fileName)) { + String fileData = FileHelper.readFile(context, fileName); + Map map = JsonHelper.stringToMap(fileData); + + for (Object key : map.keySet()) { + result.put((String) key, String.valueOf(map.get(key))); + } + } + } + catch (Exception e) { + Log.w(TAG, "Unable to read file " + fileName, e); + } + + return result; + } + + /** + * Load a map of Arrays for the given JSON file. The file should be formatted as a flat + * object with string key, array values, e.g.: + * + * { + * "Key1", ["Value1", "Value2", ..] + * "Key2", ["Value3", "Value4", ..] + * } + * + * @param context Context. + * @param fileNameId File name ID of the file to read from. + * @return The JSON file parsed as a map of Hash set. If there was an error while reading the + * file such as the file not existing, an empty map is returned and the error is logged. + */ + public static HashMap> loadArrayMappingFromJsonFile(Context context, + int fileNameId) { + + HashMap> result = new HashMap<>(); + String fileName = context.getString(fileNameId); + try { + if (FileHelper.doesFileExist(context, fileName)) { + String fileData = FileHelper.readFile(context, fileName); + Map map = JsonHelper.stringToMap(fileData); + + for (Object key : map.keySet()) { + Object arrayObject = map.get(key); + if (arrayObject instanceof List) { + result.put((String) key, new HashSet((List) arrayObject)); + } + } + } + } + catch (Exception e) { + Log.w(TAG, "Unable to read file " + fileName, e); + } + + return result; + } +} diff --git a/Utils/src/main/java/com/amazon/android/utils/NetworkUtils.java b/Utils/src/main/java/com/amazon/android/utils/NetworkUtils.java index 614754e..05702cb 100644 --- a/Utils/src/main/java/com/amazon/android/utils/NetworkUtils.java +++ b/Utils/src/main/java/com/amazon/android/utils/NetworkUtils.java @@ -177,7 +177,7 @@ public static boolean urlContainsParameter(String urlString, String parameter) { /** * Adds a parameter with the given value to the query of a URL. It will not add the parameter - * if a value already exists for the parameter in the query. + * if a value already exists for the parameter in the query or if the URL has no query. * * @param urlString The URL. * @param parameter The parameter to add. @@ -197,22 +197,25 @@ public static String addParameterToUrl(String urlString, String parameter, Strin return newUrlString; } - // If the url doesn't have the parameter then just add it to the end. - if (queryParams.get(parameter) == null) { - newUrlString = urlString + "&" + parameter + "=" + value; - } - // If the url contains the parameter but with no value, insert the value. - else if (queryParams.get(parameter).isEmpty()) { - String[] split = urlString.split(parameter + "="); - if (split.length > 0) { - newUrlString = split[0] + parameter + "=" + value; - if (split.length > 1) { - newUrlString += split[1]; + // Only add the parameter if the original URL contains a query. + if (!queryParams.isEmpty()) { + // If the url doesn't have the parameter then just add it to the end. + if (queryParams.get(parameter) == null) { + newUrlString = urlString + "&" + parameter + "=" + value; + } + // If the url contains the parameter but with no value, insert the value. + else if (queryParams.get(parameter).isEmpty()) { + String[] split = urlString.split(parameter + "="); + if (split.length > 0) { + newUrlString = split[0] + parameter + "=" + value; + if (split.length > 1) { + newUrlString += split[1]; + } } } - } - else { - Log.d(TAG, "Cannot add parameter to URL because it already exists"); + else { + Log.d(TAG, "Cannot add parameter to URL because it already exists"); + } } return newUrlString; } @@ -229,21 +232,23 @@ private static Map getUrlQueryParameters(String urlString) throw Map queryParams = new HashMap<>(); URL url = new URL(urlString); String query = url.getQuery(); - String[] strParams = query.split("&"); - - for (String param : strParams) { - String[] split = param.split("="); - // Get the parameter name. - if (split.length > 0) { - String name = split[0]; - // Get the parameter value. - if (split.length > 1) { - String value = split[1]; - queryParams.put(name, value); - } - // If there is no value just put an empty string as placeholder. - else { - queryParams.put(name, ""); + if (query != null) { + String[] strParams = query.split("&"); + + for (String param : strParams) { + String[] split = param.split("="); + // Get the parameter name. + if (split.length > 0) { + String name = split[0]; + // Get the parameter value. + if (split.length > 1) { + String value = split[1]; + queryParams.put(name, value); + } + // If there is no value just put an empty string as placeholder. + else { + queryParams.put(name, ""); + } } } } diff --git a/Utils/src/main/java/com/amazon/utils/DateAndTimeHelper.java b/Utils/src/main/java/com/amazon/utils/DateAndTimeHelper.java index bb16acb..7eba1a3 100644 --- a/Utils/src/main/java/com/amazon/utils/DateAndTimeHelper.java +++ b/Utils/src/main/java/com/amazon/utils/DateAndTimeHelper.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * A copy of the License is located at * - * http://aws.amazon.com/apache2.0/ + * http://aws.amazon.com/apache2.0/ * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either @@ -14,6 +14,10 @@ */ package com.amazon.utils; +import android.util.Log; + +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; @@ -22,6 +26,8 @@ */ public class DateAndTimeHelper { + public static final String TAG = DateAndTimeHelper.class.getSimpleName(); + /** * Returns current date. * @@ -58,4 +64,44 @@ public static boolean compareDates(Date oldDate, Date newDate) { return oldDate == null || oldDate.before(newDate); } + + /** + * Convert a simple date time with the format "HH:mm:ss.SSS" or "HH:mm:ss" to seconds. + * + * @param timeToConvert Time to convert. Expecting format of "HH:mm:ss.SSS" or "HH:mm:ss". + * @return The converted time in seconds. + */ + public static double convertDateFormatToSeconds(String timeToConvert) { + + if (timeToConvert == null) { + return -1; + } + + try { + SimpleDateFormat sdf; + + if (timeToConvert.matches("\\d+:\\d{2}:\\d{2}.\\d{3}")) { + sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + } + else if (timeToConvert.matches("\\d+:\\d{2}:\\d{2}")) { + sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + else { + throw new ParseException("Time format does not match expected.", 0); + } + + double time1 = sdf.parse("1970-01-01 00:00:00.000").getTime() / 1000; + + // if not valid, it will throw ParseException + Date date = sdf.parse("1970-01-01 " + timeToConvert); + return (date.getTime() / 1000) - time1; + + } + catch (ParseException e) { + Log.e(TAG, "Date to convert is not of a valid date format. Expecting \"HH:mm:ss.SSS\"" + + "or \"HH:mm:ss\""); + + return -1; + } + } } diff --git a/Utils/src/main/java/com/amazon/utils/ListUtils.java b/Utils/src/main/java/com/amazon/utils/ListUtils.java index 05302f9..aa8a9d9 100644 --- a/Utils/src/main/java/com/amazon/utils/ListUtils.java +++ b/Utils/src/main/java/com/amazon/utils/ListUtils.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; /** * Utilities for Lists. @@ -87,6 +88,26 @@ public static List stringToList(String string) throws ExpectingJsonArray return list; } + /** + * Get a map value from a map using a key and return it as a list. + * + * @param map The map to get the map value from. + * @param key The key to get the map value. + * @return A list of maps. + */ + public static List getValueAsMapList(Map map, String key) { + + if (map == null || StringManipulation.isNullOrEmpty(key) || map.get(key) == null) { + return new ArrayList<>(); + } + if (map.get(key) instanceof List) { + return (List) map.get(key); + } + List list = new ArrayList<>(); + list.add(map.get(key)); + return list; + } + /** * An error message for when a content's member variable is expected to be a string * representation of a JSON array but is something else. diff --git a/Utils/src/test/java/com/amazon/utils/ListUtilsTest.java b/Utils/src/test/java/com/amazon/utils/ListUtilsTest.java new file mode 100644 index 0000000..2b41741 --- /dev/null +++ b/Utils/src/test/java/com/amazon/utils/ListUtilsTest.java @@ -0,0 +1,70 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.utils; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; + +/** + * Tests the {@link ListUtils} class. + */ +public class ListUtilsTest { + + /** + * Tests the {@link ListUtils#getValueAsMapList(Map, String)} method. + */ + @Test + public void testGetValueAsMapList() { + + Map map = new HashMap<>(); + Map innerMap1 = new HashMap(); + innerMap1.put("key1", "value1"); + + Map innerMap2 = new HashMap(); + innerMap2.put("key1", "value2"); + + List list = new ArrayList<>(); + list.add(innerMap1); + list.add(innerMap2); + + map.put("mapKey", innerMap1); + map.put("listKey", list); + + List> expected = ListUtils.getValueAsMapList(map, "mapKey"); + assertEquals(1, expected.size()); + + expected = ListUtils.getValueAsMapList(map, "listKey"); + assertEquals(2, expected.size()); + + expected = ListUtils.getValueAsMapList(map, "badKey"); + assertEquals(0, expected.size()); + + expected = ListUtils.getValueAsMapList((Map) null, "key"); + assertEquals(0, expected.size()); + + expected = ListUtils.getValueAsMapList(map, null); + assertEquals(0, expected.size()); + + expected = ListUtils.getValueAsMapList(map, ""); + assertEquals(0, expected.size()); + } + +} diff --git a/VastAdsComponent/build.gradle b/VastAdsComponent/build.gradle index 31bc8e6..cf106b6 100644 --- a/VastAdsComponent/build.gradle +++ b/VastAdsComponent/build.gradle @@ -23,6 +23,8 @@ android { targetSdkVersion 23 versionCode 1 versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } buildTypes { release { @@ -38,10 +40,18 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/mfXerces.jar') - testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0' + androidTestCompile('com.android.support.test:runner:0.4') { + exclude group: 'com.android.support', module: 'support-annotations' + } + androidTestCompile('com.android.support.test:rules:0.4') { + exclude group: 'com.android.support', module: 'support-annotations' + } + androidTestCompile 'junit:junit:4.12' + compile project(':ModuleInterface') compile project(':AdsInterface') + compile project(':DynamicParser') compile project(':Utils') } diff --git a/VastAdsComponent/src/androidTest/java/com/amazon/android/ads/vast/model/vmap/AdBreakTest.java b/VastAdsComponent/src/androidTest/java/com/amazon/android/ads/vast/model/vmap/AdBreakTest.java new file mode 100644 index 0000000..5c5b5cd --- /dev/null +++ b/VastAdsComponent/src/androidTest/java/com/amazon/android/ads/vast/model/vmap/AdBreakTest.java @@ -0,0 +1,56 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vmap; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Tests the {@link AdBreak} class. + */ +public class AdBreakTest { + + private AdBreak mAdBreak; + + @Before + public void setUp() { + + mAdBreak = new AdBreak(); + mAdBreak.setTimeOffset("end"); + } + + @Test + public void getTimeOffset() throws Exception { + + assertEquals("end", mAdBreak.getTimeOffset()); + } + + @Test + public void setTimeOffset() throws Exception { + + mAdBreak.setTimeOffset("start"); + assertEquals("start", mAdBreak.getTimeOffset()); + } + + @Test + public void getConvertedTimeOffset() throws Exception { + + assertTrue(-1 == mAdBreak.getConvertedTimeOffset()); + mAdBreak.setTimeOffset("00:00:15.000"); + assertTrue(15 == mAdBreak.getConvertedTimeOffset()); + } +} diff --git a/VastAdsComponent/src/androidTest/java/com/amazon/android/ads/vast/processor/AdTagProcessorTest.java b/VastAdsComponent/src/androidTest/java/com/amazon/android/ads/vast/processor/AdTagProcessorTest.java new file mode 100644 index 0000000..612c5e5 --- /dev/null +++ b/VastAdsComponent/src/androidTest/java/com/amazon/android/ads/vast/processor/AdTagProcessorTest.java @@ -0,0 +1,745 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.processor; + +import com.amazon.android.ads.vast.model.vast.Companion; +import com.amazon.android.ads.vast.model.vast.CompanionAd; +import com.amazon.android.ads.vast.model.vast.Creative; +import com.amazon.android.ads.vast.model.vast.Inline; +import com.amazon.android.ads.vast.model.vast.LinearAd; +import com.amazon.android.ads.vast.model.vast.MediaFile; +import com.amazon.android.ads.vast.model.vast.VastResponse; +import com.amazon.android.ads.vast.model.vast.VastAd; +import com.amazon.android.ads.vast.model.vmap.AdBreak; +import com.amazon.android.ads.vast.model.vmap.AdSource; +import com.amazon.android.ads.vast.model.vmap.AdTagURI; +import com.amazon.android.ads.vast.model.vmap.Extension; +import com.amazon.android.ads.vast.model.vmap.Tracking; +import com.amazon.android.ads.vast.model.vmap.VmapResponse; +import com.amazon.android.ads.vast.test.R; +import com.amazon.android.ads.vast.util.DefaultMediaPicker; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import java.util.HashMap; +import java.util.List; + +import static org.junit.Assert.*; + +/** + * Tests the {@link AdTagProcessor} class. Makes sure it can process the VMAP tag urls from + * https://developers.google.com/interactive-media-ads/docs/sdks/html5/tags. + */ +@RunWith(AndroidJUnit4.class) +public class AdTagProcessorTest { + + private AdTagProcessor mAdTagProcessor; + + @Before + public void setUp() { + + mAdTagProcessor = new AdTagProcessor(new DefaultMediaPicker(InstrumentationRegistry + .getContext())); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with an invalid tag url. The result + * should be an error value. + */ + @Test + public void testProcessError() throws Exception { + + assertTrue(mAdTagProcessor.process("some bad text") == AdTagProcessor.AdTagType.error); + + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VAST 2.0 tag. + */ + @Test + public void testProcessVast2Ad() throws Exception { + + String vast2Ad = InstrumentationRegistry.getContext().getString(R.string.vast_2_tag); + assertTrue(mAdTagProcessor.process(vast2Ad) == AdTagProcessor.AdTagType.vast); + + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VAST 2.0 wrapper tag. + */ + @Test + public void testProcessVast2WrapperAd() throws Exception { + + String vast2Ad = + InstrumentationRegistry.getContext().getString(R.string.vast_2_wrapper_tag); + + assertTrue(mAdTagProcessor.process(vast2Ad) == AdTagProcessor.AdTagType.vast); + + VastResponse vastResponse = mAdTagProcessor.getAdResponse().getAdBreaks().get(0) + .getAdSource().getVastResponse(); + + assertNotNull(vastResponse); + assertEquals("2.0", vastResponse.getVersion()); + + Inline inline = vastResponse.getInlineAds().get(0); + assertNotNull(inline); + + + assertEquals(2, inline.getImpressions().size()); + assertEquals("http://www.target.com/impression?impression", + inline.getImpressions().get(0)); + assertEquals("http://www.wrapper1.com/impression?impression", + inline.getImpressions().get(1)); + + assertEquals(1, inline.getErrorUrls().size()); + assertEquals("http://www.wrapper1.com/error", inline.getErrorUrls().get(0)); + + assertEquals(1, inline.getCreatives().size()); + Creative creative = inline.getCreatives().get(0); + assertEquals("00:00:15", ((LinearAd) creative.getVastAd()).getDuration()); + assertEquals(9, creative.getVastAd().getTrackingEvents().size()); + assertEquals(1, creative.getVastAd().getMediaFiles().size()); + + HashMap> trackingEvents = inline.getTrackingEvents(); + assertEquals(2, trackingEvents.get(Tracking.FIRST_QUARTILE_TYPE).size()); + assertTrue(trackingEvents.get(Tracking.FIRST_QUARTILE_TYPE) + .contains("http://www.target.com/event?firstQuartile")); + assertTrue(trackingEvents.get(Tracking.FIRST_QUARTILE_TYPE) + .contains("http://www.wrapper1.com/event?firstQuartile")); + assertEquals(2, trackingEvents.get(Tracking.MIDPOINT_TYPE).size()); + assertEquals(2, trackingEvents.get(Tracking.THIRD_QUARTILE_TYPE).size()); + assertEquals(2, trackingEvents.get(Tracking.COMPLETE_TYPE).size()); + assertEquals(1, trackingEvents.get(Tracking.MUTE_TYPE).size()); + + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VAST 3.0 wrapper tag. + */ + @Test + public void testProcessVast3WrapperAd() throws Exception { + + String vast3Ad = + InstrumentationRegistry.getContext().getString(R.string.vast_3_wrapper_tag); + + assertTrue(mAdTagProcessor.process(vast3Ad) == AdTagProcessor.AdTagType.vast); + + VastResponse vastResponse = mAdTagProcessor.getAdResponse().getAdBreaks().get(0) + .getAdSource().getVastResponse(); + + assertNotNull(vastResponse); + assertEquals("3.0", vastResponse.getVersion()); + Inline inline = vastResponse.getInlineAds().get(0); + assertNotNull(inline); + + + assertEquals(2, inline.getImpressions().size()); + + assertEquals(2, inline.getErrorUrls().size()); + + assertEquals(2, inline.getCreatives().size()); + Creative creative = inline.getCreatives().get(0); + assertEquals("00:00:10", ((LinearAd) creative.getVastAd()).getDuration()); + assertEquals(32, creative.getVastAd().getTrackingEvents().size()); + assertEquals(11, creative.getVastAd().getMediaFiles().size()); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VAST 3.0 tag. + */ + @Test + public void testProcessVastPreRoll() throws Exception { + + String vastPreRollTag = + InstrumentationRegistry.getContext().getString(R.string.vast_preroll_tag); + + assertTrue(mAdTagProcessor.process(vastPreRollTag) == AdTagProcessor.AdTagType.vast); + + VastResponse vastResponse = mAdTagProcessor.getAdResponse().getAdBreaks().get(0) + .getAdSource().getVastResponse(); + + assertNotNull(vastResponse); + + assertEquals("3.0", vastResponse.getVersion()); + Inline inline = vastResponse.getInlineAds().get(0); + assertNotNull(inline); + List creativeList = inline.getCreatives(); + assertEquals(2, creativeList.size()); + + Creative creative = creativeList.get(0); + assertEquals("57859154776", creative.getId()); + assertEquals("1", creative.getSequence()); + + VastAd vastAd = creative.getVastAd(); + assertNotNull(vastAd); + assertTrue(vastAd instanceof LinearAd); + LinearAd linearAd = (LinearAd) vastAd; + + List mediaFiles = linearAd.getMediaFiles(); + assertEquals(11, mediaFiles.size()); + + creative = creativeList.get(1); + assertEquals("57857370976", creative.getId()); + assertEquals("1", creative.getSequence()); + + vastAd = creative.getVastAd(); + assertNotNull(vastAd); + assertTrue(vastAd instanceof CompanionAd); + List companionList = ((CompanionAd) vastAd).getCompanions(); + assertEquals(1, companionList.size()); + Companion companion = companionList.get(0); + assertEquals("250", companion.getHeight()); + assertEquals("300", companion.getWidth()); + assertEquals("57857370976", companion.getId()); + assertEquals(1, companion.getTrackings().size()); + assertEquals("creativeView", companion.getTrackings().get(0).getEvent()); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a bad ad tag url. + */ + @Test + public void testProcessAdTagFailure() throws Exception { + + assertEquals(AdTagProcessor.AdTagType.error, mAdTagProcessor.process("bad url")); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VMAP pre-roll tag. + */ + @Test + public void testProcessVmapPreRoll() throws Exception { + + + String vmapPreRollTag = + InstrumentationRegistry.getContext().getString(R.string.vmap_preroll_tag); + + assertEquals(AdTagProcessor.AdTagType.vmap, mAdTagProcessor.process(vmapPreRollTag)); + VmapResponse vmapResponse = mAdTagProcessor.getAdResponse(); + assertNotNull(vmapResponse); + + assertEquals(1, vmapResponse.getAdBreaks().size()); + + AdBreak adBreak = vmapResponse.getAdBreaks().get(0); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + + AdSource adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-ad-1", false, true); + + VastResponse vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VMAP pre-roll tag with + * ad bumpers. + */ + @Test + public void testProcessVmapPreRollBumper() throws Exception { + + String vmapPreRollBumperTag = + InstrumentationRegistry.getContext().getString(R.string.vmap_preroll_bumper_tag); + + assertEquals(AdTagProcessor.AdTagType.vmap, mAdTagProcessor.process(vmapPreRollBumperTag)); + + VmapResponse vmapResponse = mAdTagProcessor.getAdResponse(); + assertNotNull(vmapResponse); + + List adBreakList = vmapResponse.getAdBreaks(); + assertEquals(2, adBreakList.size()); + + // Check first ad break. + AdBreak adBreak = adBreakList.get(0); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + + AdSource adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-ad-1", false, true); + + VastResponse vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check second ad break. + adBreak = adBreakList.get(1); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-post-bumper", false, true); + + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + assertEquals(1, adBreak.getExtensions().size()); + Extension extension = adBreak.getExtensions().get(0); + checkExtensionAttributes(extension, "bumper", true); + + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VMAP post-roll tag. + */ + @Test + public void testVmapPostRoll() throws Exception { + + String vmapPostRollTag = + InstrumentationRegistry.getContext().getString(R.string.vmap_postroll_tag); + + assertEquals(AdTagProcessor.AdTagType.vmap, mAdTagProcessor.process(vmapPostRollTag)); + + VmapResponse vmapResponse = mAdTagProcessor.getAdResponse(); + assertNotNull(vmapResponse); + + List adBreakList = vmapResponse.getAdBreaks(); + assertEquals(1, adBreakList.size()); + + // Check first ad break. + AdBreak adBreak = adBreakList.get(0); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + AdSource adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-ad-1", false, true); + VastResponse vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VMAP post-roll tag with ad + * bumpers. + */ + @Test + public void testVmapPostRollBumper() throws Exception { + + String vmapPreMidPostSingleAdTag = InstrumentationRegistry + .getContext().getString(R.string.vmap_postroll_bumper_tag); + + assertEquals(AdTagProcessor.AdTagType.vmap, + mAdTagProcessor.process(vmapPreMidPostSingleAdTag)); + + VmapResponse vmapResponse = mAdTagProcessor.getAdResponse(); + assertNotNull(vmapResponse); + + List adBreakList = vmapResponse.getAdBreaks(); + assertEquals(2, adBreakList.size()); + + // Check first ad break. + AdBreak adBreak = adBreakList.get(0); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + AdSource adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-pre-bumper", false, true); + VastResponse vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + assertEquals(1, adBreak.getExtensions().size()); + Extension extension = adBreak.getExtensions().get(0); + checkExtensionAttributes(extension, "bumper", true); + + // Check second ad break. + adBreak = adBreakList.get(1); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-ad-1", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VMAP tag that has pre-, mid-, + * and post-roll single ads. + */ + @Test + public void testVmapPreMidPostRollsSingleAds() throws Exception { + + String vmapPreMidPostSingleAdTag = InstrumentationRegistry + .getContext().getString(R.string.vmap_pre_mid_post_rolls_single_ads_tag); + + assertEquals(AdTagProcessor.AdTagType.vmap, + mAdTagProcessor.process(vmapPreMidPostSingleAdTag)); + + VmapResponse vmapResponse = mAdTagProcessor.getAdResponse(); + assertNotNull(vmapResponse); + + List adBreakList = vmapResponse.getAdBreaks(); + assertEquals(3, adBreakList.size()); + + // Check first ad break. + AdBreak adBreak = adBreakList.get(0); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + AdSource adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-ad-1", false, true); + VastResponse vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check second ad break. + adBreak = adBreakList.get(1); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-ad-1", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check third ad break. + adBreak = adBreakList.get(2); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-ad-1", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VMAP tag that has a single + * pre-roll ad, a mid-roll standard ad pod with 3 ads, and a single post-roll ad. + */ + @Test + public void testVmapStandardPodWith3Ads() throws Exception { + + String vmapPreMidPostSingleAdTag = InstrumentationRegistry + .getContext().getString(R.string.vmap_standard_pod_with_3_ads); + + assertEquals(AdTagProcessor.AdTagType.vmap, + mAdTagProcessor.process(vmapPreMidPostSingleAdTag)); + + VmapResponse vmapResponse = mAdTagProcessor.getAdResponse(); + List adBreakList = vmapResponse.getAdBreaks(); + assertEquals(5, adBreakList.size()); + + // Check first ad break. + AdBreak adBreak = adBreakList.get(0); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + AdSource adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-ad-1", false, true); + VastResponse vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check second ad break. + adBreak = adBreakList.get(1); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-ad-1", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check third ad break. + adBreak = adBreakList.get(2); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-ad-2", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check fourth ad break. + adBreak = adBreakList.get(3); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-ad-3", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check fifth ad break. + adBreak = adBreakList.get(4); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-ad-1", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VMAP tag that has a single + * pre-roll ad, a mid-roll optimized ad pod with 3 ads, and a single post-roll ad. + */ + @Test + public void testVmapOptimizedPodWith3Ads() throws Exception { + + String vmapPreMidPostSingleAdTag = InstrumentationRegistry + .getContext().getString(R.string.vmap_optimized_pod_with_3_ads); + + assertEquals(AdTagProcessor.AdTagType.vmap, + mAdTagProcessor.process(vmapPreMidPostSingleAdTag)); + + VmapResponse vmapResponse = mAdTagProcessor.getAdResponse(); + List adBreakList = vmapResponse.getAdBreaks(); + assertEquals(3, adBreakList.size()); + + // Check first ad break. + AdBreak adBreak = adBreakList.get(0); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + AdSource adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-ad-1", false, true); + VastResponse vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check second ad break. + adBreak = adBreakList.get(1); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-ads", true, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check third ad break. + adBreak = adBreakList.get(2); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-ad-1", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VMAP tag that has a single + * pre-roll ad, a mid-roll standard ad pod with 3 ads, and a single post-roll ad. All ad + * breaks have bumpers around them. + */ + @Test + public void testVmapStandardPodWith3AdsWithBumpers() throws Exception { + + String vmapPreMidPostSingleAdTag = InstrumentationRegistry + .getContext().getString(R.string.vmap_standard_pod_with_3_ads_bumpers); + + assertEquals(AdTagProcessor.AdTagType.vmap, + mAdTagProcessor.process(vmapPreMidPostSingleAdTag)); + + VmapResponse vmapResponse = mAdTagProcessor.getAdResponse(); + List adBreakList = vmapResponse.getAdBreaks(); + assertEquals(9, adBreakList.size()); + + // Check first ad break. + AdBreak adBreak = adBreakList.get(0); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + AdSource adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-ad-1", false, true); + VastResponse vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check second ad break. + adBreak = adBreakList.get(1); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-post-bumper", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + Extension extension = adBreak.getExtensions().get(0); + checkExtensionAttributes(extension, "bumper", true); + + // Check third ad break. + adBreak = adBreakList.get(2); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-pre-bumper", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + extension = adBreak.getExtensions().get(0); + checkExtensionAttributes(extension, "bumper", true); + + // Check fourth ad break. + adBreak = adBreakList.get(3); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-ad-1", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check fifth ad break. + adBreak = adBreakList.get(4); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-ad-2", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check sixth ad break. + adBreak = adBreakList.get(5); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-ad-3", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check seventh ad break. + adBreak = adBreakList.get(6); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-post-bumper", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check eighth ad break. + adBreak = adBreakList.get(7); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-pre-bumper", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + extension = adBreak.getExtensions().get(0); + checkExtensionAttributes(extension, "bumper", true); + + // Check ninth ad break. + adBreak = adBreakList.get(8); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-ad-1", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + } + + /** + * Tests the {@link AdTagProcessor#process(String)} method with a VMAP tag that has a single + * pre-roll ad, a mid-roll optimzied ad pod with 3 ads, and a single post-roll ad. All ad + * breaks have bumpers around them. + */ + @Test + public void testVmapOptimizedPodWith3AdsWithBumpers() throws Exception { + + String vmapPreMidPostSingleAdTag = InstrumentationRegistry + .getContext().getString(R.string.vmap_optimized_pod_with_3_ads_bumpers); + + assertEquals(AdTagProcessor.AdTagType.vmap, + mAdTagProcessor.process(vmapPreMidPostSingleAdTag)); + + VmapResponse vmapResponse = mAdTagProcessor.getAdResponse(); + List adBreakList = vmapResponse.getAdBreaks(); + assertEquals(7, adBreakList.size()); + + // Check first ad break. + AdBreak adBreak = adBreakList.get(0); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + AdSource adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-ad-1", false, true); + VastResponse vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check second ad break. + adBreak = adBreakList.get(1); + checkAdBreakAttributes(adBreak, "start", "linear", "preroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "preroll-post-bumper", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + Extension extension = adBreak.getExtensions().get(0); + checkExtensionAttributes(extension, "bumper", true); + + // Check third ad break. + adBreak = adBreakList.get(2); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-pre-bumper", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + extension = adBreak.getExtensions().get(0); + checkExtensionAttributes(extension, "bumper", true); + + // Check fourth ad break. + adBreak = adBreakList.get(3); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-ads", true, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + + // Check fifth ad break. + adBreak = adBreakList.get(4); + checkAdBreakAttributes(adBreak, "00:00:15.000", "linear", "midroll-1"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "midroll-1-post-bumper", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + extension = adBreak.getExtensions().get(0); + checkExtensionAttributes(extension, "bumper", true); + + // Check sixth ad break. + adBreak = adBreakList.get(5); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-pre-bumper", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + extension = adBreak.getExtensions().get(0); + checkExtensionAttributes(extension, "bumper", true); + + // Check seventh ad break. + adBreak = adBreakList.get(6); + checkAdBreakAttributes(adBreak, "end", "linear", "postroll"); + adSource = adBreak.getAdSource(); + checkAdSourceAttributes(adSource, "postroll-ad-1", false, true); + vastResponse = adSource.getVastResponse(); + assertNotNull(vastResponse); + } + + /** + * Checks the ad break for the expected attribute values. + * + * @param adBreak The ad break. + * @param timeOffset The expected time offset. + * @param breakType The expected break type. + * @param breakId The expected break id. + */ + private void checkAdBreakAttributes(AdBreak adBreak, String timeOffset, String breakType, + String breakId) { + + assertNotNull(adBreak); + assertEquals(timeOffset, adBreak.getTimeOffset()); + assertEquals(breakType, adBreak.getBreakType()); + assertEquals(breakId, adBreak.getBreakId()); + } + + /** + * Checks the ad source for the expected attribute values. + * + * @param adSource Teh ad source. + * @param id The expected id. + * @param allowMultipleAds The expected value for allow multiple ads. + * @param followRedirects The expected value for follow redirects. + */ + private void checkAdSourceAttributes(AdSource adSource, String id, boolean allowMultipleAds, + boolean followRedirects) { + + assertNotNull(adSource); + assertEquals(id, adSource.getId()); + assertEquals(allowMultipleAds, adSource.isAllowMultipleAds()); + assertEquals(followRedirects, adSource.isFollowRedirects()); + } + + /** + * Checks the ad tag URI for the expected attribute values. Also checks that the URI is not an + * empty string. + * + * @param adTagURI The ad tag URI. + * @param templateType The expected template type. + */ + private void checkAdTagUriAttributes(AdTagURI adTagURI, String templateType) { + + assertNotNull(adTagURI); + assertEquals(templateType, adTagURI.getTemplateType()); + assertFalse(adTagURI.getUri().isEmpty()); + } + + /** + * Checks the extension for the expected attribute values. + * + * @param extension The extension. + * @param type The expected type. + * @param suppressBumper The expected value for suppress bumper. + */ + private void checkExtensionAttributes(Extension extension, String type, boolean + suppressBumper) { + + assertNotNull(extension); + assertEquals(type, extension.getType()); + assertEquals(suppressBumper, extension.isSuppressBumper()); + } +} \ No newline at end of file diff --git a/VastAdsComponent/src/androidTest/res/values/values.xml b/VastAdsComponent/src/androidTest/res/values/values.xml new file mode 100644 index 0000000..35185d5 --- /dev/null +++ b/VastAdsComponent/src/androidTest/res/values/values.xml @@ -0,0 +1,53 @@ + + + + https://raw.githubusercontent.com/nexage/sourcekit-vast-android/master/demo/app/assets/WrapperSimple.xml + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ct%3Dredirectlinear&correlator= + + https://raw.githubusercontent.com/nexage/sourcekit-vast-android/master/demo/app/assets/Simple.xml + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ct%3Dlinear&correlator= + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpreonly&cmsid=496&vid=short_onecue&correlator= + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpreonlybumper&cmsid=496&vid=short_onecue&correlator= + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpostonly&cmsid=496&vid=short_onecue&correlator= + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpostonlybumper&cmsid=496&vid=short_onecue&correlator= + + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpremidpost&cmsid=496&vid=short_onecue&correlator= + + + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpremidpostpod&cmsid=496&vid=short_onecue&correlator= + + + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpremidpostoptimizedpod&cmsid=496&vid=short_onecue&correlator= + + + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpremidpostpodbumper&cmsid=496&vid=short_onecue&correlator= + + + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpremidpostoptimizedpodbumper&cmsid=496&vid=short_onecue&correlator= + + + \ No newline at end of file diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/VASTAdsPlayer.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/VASTAdsPlayer.java index 63669c4..2ad16ef 100644 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/VASTAdsPlayer.java +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/VASTAdsPlayer.java @@ -45,14 +45,21 @@ package com.amazon.android.ads.vast; import com.amazon.ads.IAds; -import com.amazon.android.ads.vast.model.TRACKING_EVENTS_TYPE; -import com.amazon.android.ads.vast.model.VASTModel; -import com.amazon.android.ads.vast.processor.VASTMediaPicker; -import com.amazon.android.ads.vast.processor.VASTProcessor; +import com.amazon.android.ads.vast.model.vast.Creative; +import com.amazon.android.ads.vast.model.vast.Inline; +import com.amazon.android.ads.vast.model.vast.LinearAd; +import com.amazon.android.ads.vast.model.vast.VastAd; +import com.amazon.android.ads.vast.model.vast.VastResponse; +import com.amazon.android.ads.vast.model.vmap.AdBreak; +import com.amazon.android.ads.vast.model.vmap.Tracking; +import com.amazon.android.ads.vast.model.vmap.VmapResponse; +import com.amazon.android.ads.vast.processor.AdTagProcessor; +import com.amazon.android.ads.vast.processor.MediaPicker; +import com.amazon.android.ads.vast.processor.ResponseValidator; +import com.amazon.android.ads.vast.util.VastAdListener; import com.amazon.android.ads.vast.util.DefaultMediaPicker; import com.amazon.android.ads.vast.util.HttpTools; import com.amazon.android.ads.vast.util.NetworkTools; -import com.amazon.android.ads.vast.util.VASTLog; import com.amazon.android.utils.NetworkUtils; import android.app.Activity; @@ -60,23 +67,25 @@ import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Bundle; +import android.os.SystemClock; import android.util.DisplayMetrics; +import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.FrameLayout; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Timer; import java.util.TimerTask; +import static com.amazon.utils.DateAndTimeHelper.convertDateFormatToSeconds; + /** - * This implementation of VAST is experimental and under development. Very limited support and - * documentation is provided. This can be used as a proof of concept for VAST but all code and + * This implementation of VAST is experimental and under development. Very limited support and + * documentation is provided. This can be used as a proof of concept for VAST but all code and * interfaces are subject to change. */ public class VASTAdsPlayer implements IAds, @@ -87,8 +96,8 @@ public class VASTAdsPlayer implements IAds, SurfaceHolder.Callback { private static final String TAG = VASTAdsPlayer.class.getSimpleName(); - public static final String VERSION = "1.3"; - private static final String CORRELATOR_PARAMETER = "correlator"; + public static final String VERSION = "2.0"; + // errors that can be returned in the vastError callback method of the // VASTPlayerListener public static final int ERROR_NONE = 0; @@ -100,15 +109,20 @@ public class VASTAdsPlayer implements IAds, public static final int ERROR_EXCEEDED_WRAPPER_LIMIT = 6; public static final int ERROR_VIDEO_PLAYBACK = 7; + /** + * constant to be used to convert seconds to milliseconds + */ + private static final int MILLISECONDS_IN_SECOND = 1000; + private static final long QUARTILE_TIMER_INTERVAL = 250; private Context mContext; private FrameLayout mFrameLayout; private Bundle mExtras; private IAdsEvents mIAdsEvents; + private Bundle mAdDetail; - private VASTModel mVASTModel; - private HashMap> mTrackingEventMap; + private HashMap> mTrackingEventMap; private MediaPlayer mMediaPlayer; private SurfaceView mSurfaceView; @@ -126,10 +140,21 @@ public class VASTAdsPlayer implements IAds, private Timer mTrackingEventTimer; private int mQuartile = 0; - private double mCurrentVideoPosition; - private PlayerState mPlayerState; private ActivityState mActivityState; + private VmapResponse mAdResponse; + private AdTagProcessor.AdTagType mAdType; + private List mMidRollAds; + private List mPostRollAds; + private List mPlayedMidRollAds; + private int mAdPlayedCount; + private String mCurrentAdType; + + /** + * Ad start time. + */ + private long mAdSlotStartTime; + @Override public void init(Context context, FrameLayout frameLayout, Bundle extras) { @@ -137,18 +162,17 @@ public void init(Context context, FrameLayout frameLayout, Bundle extras) { mFrameLayout = frameLayout; mExtras = extras; - DisplayMetrics displayMetrics = mContext.getResources() - .getDisplayMetrics(); + DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics(); mScreenWidth = displayMetrics.widthPixels; mScreenHeight = displayMetrics.heightPixels; - VASTLog.d(TAG, "Init called, version:" + VERSION); + Log.d(TAG, "Init called, version:" + VERSION); } @Override public void showPreRollAd() { - + Log.d(TAG, "showPreRollAd called"); cleanUpMediaPlayer(); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( @@ -156,16 +180,10 @@ public void showPreRollAd() { FrameLayout.LayoutParams.MATCH_PARENT); createSurface(params); + mCurrentAdType = IAds.PRE_ROLL_AD; + mAdPlayedCount = 0; - // Get the preroll url and give it a unique timestamp. - String preRollUrl = mContext.getResources().getString(R.string.vast_preroll_tag); - - // Try to add a correlator value. - preRollUrl = NetworkUtils.addParameterToUrl(preRollUrl, CORRELATOR_PARAMETER, - "" + System.currentTimeMillis()); - - - loadVideoWithUrl(preRollUrl); + loadAdFromUrl(); } @Override @@ -177,11 +195,49 @@ public void setIAdsEvents(IAdsEvents iAdsEvents) { @Override public void setCurrentVideoPosition(double position) { - mCurrentVideoPosition = position; + if (mMidRollAds != null && mMidRollAds.size() > 0 && + mPlayedMidRollAds.contains(false)) { + + int i = 0; + List midRollsToPlayNow = new ArrayList<>(); + for (AdBreak adBreak : mMidRollAds) { + + // Queue the add if the time offset matches the playback position + // and the ad hasn't been played yet. + if (adBreak.getConvertedTimeOffset() == ((int) position / 1000) + && !mPlayedMidRollAds.get(i)) { + + Log.d(TAG, "Mid roll " + i + " played=" + mPlayedMidRollAds.get(i) + + " compare :" + adBreak.getConvertedTimeOffset() + " == " + + (int) (position / 1000)); + + midRollsToPlayNow.add(adBreak); + mPlayedMidRollAds.set(i, true); + } + i++; + } + // Play any mid-roll ads that matched the playback position + if (!midRollsToPlayNow.isEmpty()) { + createMediaPlayer(); + + Log.d(TAG, "Play mid-rolls!!"); + mCurrentAdType = IAds.MID_ROLL_AD; + mAdListener.startAdPod(0, midRollsToPlayNow); + } + } + } + + @Override + public boolean isPostRollAvailable() { + + return mPostRollAds != null && mPostRollAds.size() > 0; } @Override public void setActivityState(ActivityState activityState) { + + Log.d(TAG, "Activity state changed from " + mActivityState + " to " + activityState); + mActivityState = activityState; activityStateChanged(activityState); } @@ -205,7 +261,15 @@ private void activityStateChanged(ActivityState activityState) { @Override public void setPlayerState(PlayerState playerState) { - mPlayerState = playerState; + if (playerState == PlayerState.COMPLETED) { + if (mPostRollAds != null && mPostRollAds.size() > 0) { + if (mAdListener != null) { + Log.d(TAG, "Start post roll ads"); + mCurrentAdType = IAds.POST_ROLL_AD; + mAdListener.startAdPod(0, mPostRollAds); + } + } + } } @Override @@ -223,100 +287,259 @@ public Bundle getExtra() { return mExtras; } - private void loadVideoWithUrl(final String urlString) { + /** + * return inline ads list + * + * @return List of inline ads. + */ + private List getInlineAds(AdBreak currentAd){ - VASTLog.d(TAG, "loadVideoWithUrl " + urlString); - mVASTModel = null; - if (NetworkTools.connectedToInternet(mContext)) { - (new Thread(new Runnable() { - @Override - public void run() { + List inlineAds = null; + VastResponse vastResponse = currentAd.getAdSource().getVastResponse(); + //need to check here for null as we can also get custom ad data in a vmap response + if (vastResponse != null) { + inlineAds = vastResponse.getInlineAds(); + } + return inlineAds; + } - BufferedReader in = null; - StringBuffer sb; - try { - URL url = new URL(urlString); + /** + * provide ad id from a inline ad + * + * @return String ad id. + */ + private String getCurrentAdId(AdBreak currentAd) { + + String adId = null; + //ToDo: we need to change this after we are having single inline in each ad + //instead of single ad with multiple inlines. + List inlineAds = getInlineAds(currentAd); + //We may possibly get a wrapper ad instead of a inline ad attribute + if (inlineAds != null && !inlineAds.isEmpty()) { + adId = inlineAds.get(0).getId(); + } + return adId; + } - in = new BufferedReader(new InputStreamReader(url.openStream())); - sb = new StringBuffer(); - String line; - while ((line = in.readLine()) != null) { - sb.append(line).append(System.getProperty("line.separator")); - } - } catch (Exception e) { - mVASTPlayerListener.vastError(ERROR_XML_OPEN_OR_READ); - VASTLog.e(TAG, e.getMessage(), e); - return; - } finally { - try { - if (in != null) { - in.close(); - } - } catch (IOException e) { - // ignore - } - } - loadVideoWithData(sb.toString()); + /** + * provide duration from a linear ad + * + * @return String ad duration. + */ + private String getCurrentAdDuration(AdBreak currentAd) { + + String duration = null; + List inlineAds = getInlineAds(currentAd); + //We may possibly get a wrapper ad instead of a inline ad attribute + if (inlineAds != null && !inlineAds.isEmpty()) { + //ToDo: we may need to change this if we start selecting the best format + // in muliple creatives + List mCreatives = inlineAds.get(0).getCreatives(); + //creatives is a required field in linear ad + VastAd mVastAd = mCreatives.get(0).getVastAd(); + if (mVastAd instanceof LinearAd) { + duration = ((LinearAd) mVastAd).getDuration(); + } + } + return duration; + } + + /** + * provide basic ad details + * + * @return bundle containing ad details. + */ + private Bundle getBasicAdDetailBundle() { + + if (mAdDetail == null) { + mAdDetail = new Bundle(); + AdBreak currentAd = mAdResponse.getCurrentAd(); + if (currentAd != null) { + mAdDetail.putString(ID, getCurrentAdId(currentAd)); + mAdDetail.putString(AD_TYPE, mCurrentAdType); + String duration = getCurrentAdDuration(currentAd); + if (duration != null) { + mAdDetail.putLong(DURATION_RECEIVED, (long) (convertDateFormatToSeconds + (duration) * MILLISECONDS_IN_SECOND)); } - })).start(); - } else { - mVASTPlayerListener.vastError(ERROR_NO_NETWORK); + } } + return mAdDetail; } - private void loadVideoWithData(final String xmlData) { + /** + * Load data from the ad tag string resource and process the data to get the ad response. + */ + private void loadAdFromUrl() { + + Log.d(TAG, "Loading the ad model from url."); + mAdResponse = null; - VASTLog.v(TAG, "loadVideoWithData\n" + xmlData); - mVASTModel = null; if (NetworkTools.connectedToInternet(mContext)) { (new Thread(new Runnable() { @Override public void run() { - VASTMediaPicker mediaPicker = new DefaultMediaPicker(mContext); - VASTProcessor processor = new VASTProcessor(mediaPicker); - int error = processor.process(xmlData); - if (error == ERROR_NONE) { - mVASTModel = processor.getModel(); - mVASTPlayerListener.vastReady(); - } else { - mVASTPlayerListener.vastError(error); + MediaPicker mediaPicker = new DefaultMediaPicker(mContext); + AdTagProcessor adTagProcessor = new AdTagProcessor(mediaPicker); + + String adUrl = mContext.getResources().getString(R.string.ad_tag); + + // Try to add a correlator value to the url if needed. + adUrl = NetworkUtils.addParameterToUrl(adUrl, IAds.CORRELATOR_PARAMETER, + "" + System.currentTimeMillis()); + + mAdType = adTagProcessor.process(adUrl); + + if (mAdType != AdTagProcessor.AdTagType.error) { + mAdResponse = adTagProcessor.getAdResponse(); + mAdListener.adsReady(); + } + else { + mVASTPlayerListener.vastError(ERROR_XML_PARSE); } } })).start(); - } else { + } + else { mVASTPlayerListener.vastError(ERROR_NO_NETWORK); } } - // NOT BEING CALLED IN UI THREAD!!! + /** + * An ad listener that deals with playing ad pods (multiple ads at a time). + */ + private VastAdListener mAdListener = new VastAdListener() { + + List adList; + int adIdx; + + @Override + public void adsReady() { + + Log.d(TAG, "Ad models are ready"); + mMidRollAds = mAdResponse.getMidRollAdBreaks(); + mPostRollAds = mAdResponse.getPostRollAdBreaks(); + mPlayedMidRollAds = new ArrayList<>(); + for (int i = 0; i < mMidRollAds.size(); i++) { + mPlayedMidRollAds.add(false); + } + Log.d(TAG, "Starting pre-roll ads"); + startAdPod(0, mAdResponse.getPreRollAdBreaks()); + } + + @Override + public void startAdPod(int adIdx, List adList) { + + this.adIdx = adIdx; + this.adList = adList; + + // Capture ad start time. + mAdSlotStartTime = SystemClock.elapsedRealtime(); + startAd(); + } + + @Override + public void startAd() { + + Log.d(TAG, "start ad with index " + adIdx); + if (adIdx < adList.size()) { + if (mMediaPlayer == null) { + createMediaPlayer(); + } + mAdResponse.setCurrentAd(adList.get(adIdx)); + if (ResponseValidator.validateAdBreak(mAdResponse.getCurrentAd())) { + mVASTPlayerListener.vastReady(); + } + else { + Log.e(TAG, "Skipping invalid ad"); + adIdx++; + if (adIdx < adList.size()) { + startAd(); + } + else { + adPodComplete(); + } + } + } + } + + @Override + public void adComplete() { + + Log.d(TAG, "ad complete with index " + adIdx); + adIdx++; + mAdPlayedCount++; + if (mMediaPlayer != null) { + mMediaPlayer.stop(); + } + cleanUpMediaPlayer(); + if (mIAdsEvents != null) { + // Calculate how long Ads played. + long adSlotTime = SystemClock.elapsedRealtime() - mAdSlotStartTime; + Bundle extras = getBasicAdDetailBundle(); + extras.putLong(DURATION_PLAYED, adSlotTime); + extras.putBoolean(IAds.AD_POD_COMPLETE, adIdx == adList.size()); + // Let listener know about Ad slot stop event. + mIAdsEvents.onAdSlotEnded(extras); + } + if (adIdx < adList.size()) { + startAd(); + } + else { + adPodComplete(); + } + } + + @Override + public void adPodComplete() { + Log.d(TAG, "ad pod complete"); + Log.d(TAG, "Played " + mAdPlayedCount + " of " + mAdResponse.getAdBreaks().size() + + " ads"); + + if (mAdPlayedCount == mAdResponse.getAdBreaks().size()) { + if (mVASTPlayerListener != null) { + mVASTPlayerListener.vastComplete(); + } + } + } + }; + + // NOT CALLED IN UI THREAD!!! private VASTPlayerListener mVASTPlayerListener = new VASTPlayerListener() { + @Override public void vastReady() { - mTrackingEventMap = mVASTModel.getTrackingUrls(); + Log.d(TAG, "Vast ready!"); - ((Activity) mContext).runOnUiThread(new Runnable() { - @Override - public void run() { + if (mAdResponse != null) { + + mTrackingEventMap = mAdResponse.getCurrentAd().getTrackingUrls(); - String url = mVASTModel.getPickedMediaFileURL(); + ((Activity) mContext).runOnUiThread(new Runnable() { + @Override + public void run() { - VASTLog.d(TAG, "URL for media file:" + url); - try { - mMediaPlayer.setDataSource(url); - } catch (IOException e) { - VASTLog.e(TAG, "Could not set data source for VAST ad",e); + String url = mAdResponse.getCurrentAd().getSelectedMediaFileUrl(); + + Log.d(TAG, "URL for media file:" + url); + try { + mMediaPlayer.setDataSource(url); + } + catch (IOException e) { + Log.e(TAG, "Could not set data source for VAST ad", e); + } + mMediaPlayer.prepareAsync(); } - mMediaPlayer.prepareAsync(); - } - }); + }); + } } @Override public void vastError(int error) { - VASTLog.e(TAG, "vastComplete:" + error); + Log.e(TAG, "vast error:" + error); ((Activity) mContext).runOnUiThread(new Runnable() { @Override @@ -328,7 +551,11 @@ public void run() { cleanUpMediaPlayer(); if (mIAdsEvents != null) { - mIAdsEvents.onAdSlotEnded(null); + // Calculate how long Ads played. + long adSlotTime = SystemClock.elapsedRealtime() - mAdSlotStartTime; + Bundle extras = getBasicAdDetailBundle(); + extras.putLong(DURATION_PLAYED, adSlotTime); + mIAdsEvents.onAdSlotEnded(extras); } } }); @@ -342,57 +569,53 @@ public void vastClick() { @Override public void vastComplete() { - VASTLog.e(TAG, "vastComplete"); - - if (mMediaPlayer != null) { - mMediaPlayer.stop(); - } - cleanUpMediaPlayer(); - - if (mIAdsEvents != null) { - mIAdsEvents.onAdSlotEnded(null); - } + Log.d(TAG, "vastComplete"); + cleanUpSurface(); } @Override public void vastDismiss() { - VASTLog.d(TAG, "vastDismiss"); + + Log.d(TAG, "vastDismiss"); } }; @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { - VASTLog.d(TAG, "surfaceCreated -- (SurfaceHolder callback)"); + Log.d(TAG, "surfaceCreated -- (SurfaceHolder callback)"); try { if (mMediaPlayer == null) { createMediaPlayer(); } mMediaPlayer.setDisplay(mSurfaceHolder); - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); + } + catch (Exception e) { + Log.e(TAG, e.getMessage(), e); } } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) { + } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { + } @Override public void onCompletion(MediaPlayer mediaPlayer) { - VASTLog.e(TAG, "entered onError -- (MediaPlayer callback)"); + Log.d(TAG, "entered onCompletion-- (MediaPlayer callback)"); if (!mIsPlayBackError && !mIsCompleted) { mIsCompleted = true; - this.processEvent(TRACKING_EVENTS_TYPE.complete); + this.processEvent(Tracking.COMPLETE_TYPE); - if (mVASTPlayerListener != null) { - mVASTPlayerListener.vastComplete(); + if (mAdListener != null) { + mAdListener.adComplete(); } } } @@ -400,9 +623,9 @@ public void onCompletion(MediaPlayer mediaPlayer) { @Override public boolean onError(MediaPlayer mediaPlayer, int what, int extra) { - VASTLog.e(TAG, "entered onError -- (MediaPlayer callback)"); + Log.e(TAG, "entered onError -- (MediaPlayer callback)"); mIsPlayBackError = true; - VASTLog.e(TAG, "Shutting down Activity due to Media Player errors: WHAT:" + what + ": " + + Log.e(TAG, "Shutting down Activity due to Media Player errors: WHAT:" + what + ": " + "EXTRA:" + extra + ":"); processErrorEvent(); @@ -415,7 +638,11 @@ public void onPrepared(MediaPlayer mediaPlayer) { calculateAspectRatio(); - mIAdsEvents.onAdSlotStarted(null); + mAdDetail = null; + mIAdsEvents.onAdSlotStarted(getBasicAdDetailBundle()); + + // Capture ad start time. + mAdSlotStartTime = SystemClock.elapsedRealtime(); mMediaPlayer.start(); @@ -439,27 +666,36 @@ public void onVideoSizeChanged(MediaPlayer mediaPlayer, int width, int height) { private void createSurface(FrameLayout.LayoutParams params) { + Log.d(TAG, "Creating surface"); mSurfaceView = new SurfaceView(mContext); mSurfaceView.setLayoutParams(params); mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); - mFrameLayout.addView(mSurfaceView); } private void createMediaPlayer() { + Log.d(TAG, "create media player"); mMediaPlayer = new MediaPlayer(); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnErrorListener(this); mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.setOnVideoSizeChangedListener(this); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + + ((Activity)mContext).runOnUiThread(new Runnable() { + @Override + public void run() { + mFrameLayout.addView(mSurfaceView); + } + }); + } private void cleanUpMediaPlayer() { - VASTLog.d(TAG, "entered cleanUpMediaPlayer "); + Log.d(TAG, "entered cleanUpMediaPlayer "); if (mMediaPlayer != null) { @@ -475,23 +711,35 @@ private void cleanUpMediaPlayer() { mMediaPlayer.release(); mMediaPlayer = null; - mFrameLayout.removeView(mSurfaceView); - mSurfaceHolder.removeCallback(this); - mSurfaceHolder.getSurface().release(); - mSurfaceView = null; - mSurfaceHolder = null; + ((Activity)mContext).runOnUiThread(new Runnable() { + @Override + public void run() { + mFrameLayout.removeView(mSurfaceView); + } + }); mIsVideoPaused = false; mIsPlayBackError = false; mIsProcessedImpressions = false; mIsCompleted = false; + mQuartile = 0; } } - private void processEvent(TRACKING_EVENTS_TYPE eventName) { + /** + * Clean up the surface view. Should only be done after we're done using the player. + */ + private void cleanUpSurface() { + mSurfaceHolder.removeCallback(this); + mSurfaceHolder.getSurface().release(); + mSurfaceView = null; + mSurfaceHolder = null; + } + + private void processEvent(String eventName) { - VASTLog.i(TAG, "entered Processing Event: " + eventName); + Log.i(TAG, "entered Processing Event: " + eventName); List urls = mTrackingEventMap.get(eventName); fireUrls(urls); @@ -499,43 +747,43 @@ private void processEvent(TRACKING_EVENTS_TYPE eventName) { private void processErrorEvent() { - VASTLog.d(TAG, "entered processErrorEvent"); + Log.i(TAG, "entered processErrorEvent"); - List errorUrls = mVASTModel.getErrorUrl(); + List errorUrls = mAdResponse.getCurrentAd().getErrorUrls(); fireUrls(errorUrls); } private void processImpressions() { - VASTLog.d(TAG, "entered processImpressions"); + Log.i(TAG, "entered processImpressions"); mIsProcessedImpressions = true; - List impressions = mVASTModel.getImpressions(); + List impressions = mAdResponse.getCurrentAd().getImpressions(); fireUrls(impressions); } private void fireUrls(List urls) { - VASTLog.d(TAG, "entered fireUrls"); + Log.i(TAG, "entered fireUrls"); if (urls != null) { - for (String url : urls) { - VASTLog.v(TAG, "\tfiring url:" + url); + Log.i(TAG, "\tfiring url:" + url); HttpTools.httpGetURL(url); } - } else { - VASTLog.d(TAG, "\turl list is null"); + } + else { + Log.i(TAG, "\turl list is null"); } } private void startQuartileTimer() { - VASTLog.d(TAG, "entered startQuartileTimer"); + Log.i(TAG, "entered startQuartileTimer"); stopQuartileTimer(); if (mIsCompleted) { - VASTLog.d(TAG, "ending quartileTimer because the video has been replayed"); + Log.i(TAG, "ending quartileTimer because the video has been replayed"); return; } @@ -555,31 +803,29 @@ public void run() { return; } percentage = 100 * curPos / videoDuration; - } catch (Exception e) { - VASTLog.w(TAG, - "mediaPlayer.getCurrentPosition exception: " - + e.getMessage()); + } + catch (Exception e) { + Log.e(TAG, "mediaPlayer.getCurrentPosition exception: " + e.getMessage()); this.cancel(); return; } if (percentage >= 25 * mQuartile) { if (mQuartile == 0) { - VASTLog.i(TAG, "Video at start: (" + percentage - + "%)"); - processEvent(TRACKING_EVENTS_TYPE.start); - } else if (mQuartile == 1) { - VASTLog.i(TAG, "Video at first quartile: (" - + percentage + "%)"); - processEvent(TRACKING_EVENTS_TYPE.firstQuartile); - } else if (mQuartile == 2) { - VASTLog.i(TAG, "Video at midpoint: (" - + percentage + "%)"); - processEvent(TRACKING_EVENTS_TYPE.midpoint); - } else if (mQuartile == 3) { - VASTLog.i(TAG, "Video at third quartile: (" - + percentage + "%)"); - processEvent(TRACKING_EVENTS_TYPE.thirdQuartile); + Log.i(TAG, "Video at start: (" + percentage + "%)"); + processEvent(Tracking.START_TYPE); + } + else if (mQuartile == 1) { + Log.i(TAG, "Video at first quartile: (" + percentage + "%)"); + processEvent(Tracking.FIRST_QUARTILE_TYPE); + } + else if (mQuartile == 2) { + Log.i(TAG, "Video at midpoint: (" + percentage + "%)"); + processEvent(Tracking.MIDPOINT_TYPE); + } + else if (mQuartile == 3) { + Log.i(TAG, "Video at third quartile: (" + percentage + "%)"); + processEvent(Tracking.THIRD_QUARTILE_TYPE); stopQuartileTimer(); } mQuartile++; @@ -598,14 +844,14 @@ private void stopQuartileTimer() { private void calculateAspectRatio() { - VASTLog.d(TAG, "entered calculateAspectRatio"); + Log.d(TAG, "entered calculateAspectRatio"); if (mVideoWidth == 0 || mVideoHeight == 0) { - VASTLog.w(TAG, "mVideoWidth or mVideoHeight is 0, skipping calculateAspectRatio"); + Log.w(TAG, "mVideoWidth or mVideoHeight is 0, skipping calculateAspectRatio"); return; } - VASTLog.d(TAG, "calculating aspect ratio"); + Log.d(TAG, "calculating aspect ratio"); double widthRatio = 1.0 * mScreenWidth / mVideoWidth; double heightRatio = 1.0 * mScreenHeight / mVideoHeight; @@ -616,15 +862,14 @@ private void calculateAspectRatio() { FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( surfaceWidth, surfaceHeight); - //params.addRule(RelativeLayout.CENTER_IN_PARENT); mSurfaceView.setLayoutParams(params); mSurfaceHolder.setFixedSize(surfaceWidth, surfaceHeight); - VASTLog.d(TAG, " screen size: " + mScreenWidth + "x" + mScreenHeight); - VASTLog.d(TAG, " video size: " + mVideoWidth + "x" + mVideoHeight); - VASTLog.d(TAG, " widthRatio: " + widthRatio); - VASTLog.d(TAG, " heightRatio: " + heightRatio); - VASTLog.d(TAG, "surface size: " + surfaceWidth + "x" + surfaceHeight); + Log.d(TAG, " screen size: " + mScreenWidth + "x" + mScreenHeight); + Log.d(TAG, " video size: " + mVideoWidth + "x" + mVideoHeight); + Log.d(TAG, " widthRatio: " + widthRatio); + Log.d(TAG, " heightRatio: " + heightRatio); + Log.d(TAG, "surface size: " + surfaceWidth + "x" + surfaceHeight); } } diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/TRACKING_EVENTS_TYPE.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/TRACKING_EVENTS_TYPE.java deleted file mode 100644 index ca03ef5..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/TRACKING_EVENTS_TYPE.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.model; - -public enum TRACKING_EVENTS_TYPE { - creativeView, - start, - midpoint, - firstQuartile, - thirdQuartile, - complete, - mute, - unmute, - pause, - rewind, - resume, - fullscreen, - expand, - collapse, - acceptInvitation, - close - -} \ No newline at end of file diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/Tracking.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/Tracking.java deleted file mode 100644 index f1a870e..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/Tracking.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.model; - -public class Tracking { - - private String value; - private TRACKING_EVENTS_TYPE event; - - public String getValue() { - - return value; - } - - public void setValue(String value) { - - this.value = value; - } - - public TRACKING_EVENTS_TYPE getEvent() { - - return event; - } - - public void setEvent(TRACKING_EVENTS_TYPE event) { - - this.event = event; - } - - @Override - public String toString() { - - return "Tracking [event=" + event + ", value=" + value + "]"; - } - -} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VASTMediaFile.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VASTMediaFile.java deleted file mode 100644 index 54bff02..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VASTMediaFile.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.model; - -import java.math.BigInteger; - -public class VASTMediaFile { - - private String value; - private String id; - private String delivery; - private String type; - private BigInteger bitrate; - private BigInteger width; - private BigInteger height; - private Boolean scalable; - private Boolean maintainAspectRatio; - private String apiFramework; - - public String getValue() { - - return value; - } - - public void setValue(String value) { - - this.value = value; - } - - public String getId() { - - return id; - } - - public void setId(String value) { - - this.id = value; - } - - public String getDelivery() { - - return delivery; - } - - public void setDelivery(String value) { - - this.delivery = value; - } - - public String getType() { - - return type; - } - - public void setType(String value) { - - this.type = value; - } - - public BigInteger getBitrate() { - - return bitrate; - } - - public void setBitrate(BigInteger value) { - - this.bitrate = value; - } - - public BigInteger getWidth() { - - return width; - } - - public void setWidth(BigInteger value) { - - this.width = value; - } - - public BigInteger getHeight() { - - return height; - } - - public void setHeight(BigInteger value) { - - this.height = value; - } - - public Boolean isScalable() { - - return scalable; - } - - public void setScalable(Boolean value) { - - this.scalable = value; - } - - public Boolean isMaintainAspectRatio() { - - return maintainAspectRatio; - } - - public void setMaintainAspectRatio(Boolean value) { - - this.maintainAspectRatio = value; - } - - public String getApiFramework() { - - return apiFramework; - } - - public void setApiFramework(String value) { - - this.apiFramework = value; - } - - @Override - public String toString() { - - return "MediaFile [value=" + value + ", id=" + id + ", delivery=" - + delivery + ", type=" + type + ", bitrate=" + bitrate - + ", width=" + width + ", height=" + height + ", scalable=" - + scalable + ", maintainAspectRatio=" + maintainAspectRatio - + ", apiFramework=" + apiFramework + "]"; - } - -} \ No newline at end of file diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VASTModel.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VASTModel.java deleted file mode 100644 index 53a431b..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VASTModel.java +++ /dev/null @@ -1,401 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.model; - -import com.amazon.android.ads.vast.util.VASTLog; -import com.amazon.android.ads.vast.util.XmlTools; - -import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathFactory; - -public class VASTModel implements Serializable { - - private static String TAG = "VASTModel"; - - private static final long serialVersionUID = 4318368258447283733L; - - private transient Document vastsDocument; - private String pickedMediaFileURL = null; - - // Tracking xpath expressions - private static final String inlineLinearTrackingXPATH = "/VASTS/VAST/Ad/InLine/Creatives/Creative/Linear/TrackingEvents/Tracking"; - private static final String inlineNonLinearTrackingXPATH = "/VASTS/VAST/Ad/InLine/Creatives/Creative/NonLinearAds/TrackingEvents/Tracking"; - private static final String wrapperLinearTrackingXPATH = "/VASTS/VAST/Ad/Wrapper/Creatives/Creative/Linear/TrackingEvents/Tracking"; - private static final String wrapperNonLinearTrackingXPATH = "/VASTS/VAST/Ad/Wrapper/Creatives/Creative/NonLinearAds/TrackingEvents/Tracking"; - - private static final String combinedTrackingXPATH = inlineLinearTrackingXPATH - + "|" - + inlineNonLinearTrackingXPATH - + "|" - + wrapperLinearTrackingXPATH + "|" + wrapperNonLinearTrackingXPATH; - - // Mediafile xpath expression - private static final String mediaFileXPATH = "//MediaFile"; - - // Duration xpath expression - private static final String durationXPATH = "//Duration"; - - // Videoclicks xpath expression - private static final String videoClicksXPATH = "//VideoClicks"; - - // Videoclicks xpath expression - private static final String impressionXPATH = "//Impression"; - - // Error url xpath expression - private static final String errorUrlXPATH = "//Error"; - - public VASTModel(Document vasts) { - - this.vastsDocument = vasts; - - } - - - public Document getVastsDocument() { - return vastsDocument; - } - - public HashMap> getTrackingUrls() { - VASTLog.d(TAG, "getTrackingUrls"); - - List tracking; - - HashMap> trackings = new HashMap<>(); - - XPath xpath = XPathFactory.newInstance().newXPath(); - - try { - NodeList nodes = (NodeList) xpath.evaluate(combinedTrackingXPATH, - vastsDocument, XPathConstants.NODESET); - Node node; - String trackingURL; - String eventName; - TRACKING_EVENTS_TYPE key; - - if (nodes != null) { - for (int i = 0; i < nodes.getLength(); i++) { - node = nodes.item(i); - NamedNodeMap attributes = node.getAttributes(); - - eventName = (attributes.getNamedItem("event")) - .getNodeValue(); - try { - key = TRACKING_EVENTS_TYPE.valueOf(eventName); - } catch (IllegalArgumentException e) { - VASTLog.w(TAG, "Event:" + eventName - + " is not valid. Skipping it."); - continue; - } - - trackingURL = XmlTools.getElementValue(node); - - if (trackings.containsKey(key)) { - tracking = trackings.get(key); - tracking.add(trackingURL); - } else { - tracking = new ArrayList<>(); - tracking.add(trackingURL); - trackings.put(key, tracking); - - } - - } - } - - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - return null; - } - - return trackings; - } - - public List getMediaFiles() { - VASTLog.d(TAG, "getMediaFiles"); - - ArrayList mediaFiles = new ArrayList<>(); - - XPath xpath = XPathFactory.newInstance().newXPath(); - - try { - NodeList nodes = (NodeList) xpath.evaluate(mediaFileXPATH, - vastsDocument, XPathConstants.NODESET); - Node node; - VASTMediaFile mediaFile; - String mediaURL; - Node attributeNode; - - if (nodes != null) { - for (int i = 0; i < nodes.getLength(); i++) { - mediaFile = new VASTMediaFile(); - node = nodes.item(i); - NamedNodeMap attributes = node.getAttributes(); - - attributeNode = attributes.getNamedItem("apiFramework"); - mediaFile.setApiFramework((attributeNode == null) ? null - : attributeNode.getNodeValue()); - - attributeNode = attributes.getNamedItem("bitrate"); - mediaFile.setBitrate((attributeNode == null) ? null - : new BigInteger(attributeNode.getNodeValue())); - - attributeNode = attributes.getNamedItem("delivery"); - mediaFile.setDelivery((attributeNode == null) ? null - : attributeNode.getNodeValue()); - - attributeNode = attributes.getNamedItem("height"); - mediaFile.setHeight((attributeNode == null) ? null - : new BigInteger(attributeNode.getNodeValue())); - - attributeNode = attributes.getNamedItem("id"); - mediaFile.setId((attributeNode == null) ? null - : attributeNode.getNodeValue()); - - attributeNode = attributes - .getNamedItem("maintainAspectRatio"); - mediaFile - .setMaintainAspectRatio((attributeNode == null) ? null - : Boolean.valueOf(attributeNode - .getNodeValue())); - - attributeNode = attributes.getNamedItem("scalable"); - mediaFile.setScalable((attributeNode == null) ? null - : Boolean.valueOf(attributeNode.getNodeValue())); - - attributeNode = attributes.getNamedItem("type"); - mediaFile.setType((attributeNode == null) ? null - : attributeNode.getNodeValue()); - - attributeNode = attributes.getNamedItem("width"); - mediaFile.setWidth((attributeNode == null) ? null - : new BigInteger(attributeNode.getNodeValue())); - - mediaURL = XmlTools.getElementValue(node); - mediaFile.setValue(mediaURL); - - mediaFiles.add(mediaFile); - } - } - - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - return null; - } - - return mediaFiles; - } - - public String getDuration() { - VASTLog.d(TAG, "getDuration"); - - String duration = null; - - XPath xpath = XPathFactory.newInstance().newXPath(); - - try { - NodeList nodes = (NodeList) xpath.evaluate(durationXPATH, - vastsDocument, XPathConstants.NODESET); - Node node; - - if (nodes != null) { - for (int i = 0; i < nodes.getLength(); i++) { - node = nodes.item(i); - duration = XmlTools.getElementValue(node); - } - } - - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - return null; - } - - return duration; - } - - public VideoClicks getVideoClicks() { - VASTLog.d(TAG, "getVideoClicks"); - - VideoClicks videoClicks = new VideoClicks(); - - XPath xpath = XPathFactory.newInstance().newXPath(); - - try { - NodeList nodes = (NodeList) xpath.evaluate(videoClicksXPATH, - vastsDocument, XPathConstants.NODESET); - Node node; - - if (nodes != null) { - for (int i = 0; i < nodes.getLength(); i++) { - node = nodes.item(i); - - NodeList childNodes = node.getChildNodes(); - - Node child; - String value; - - for (int childIndex = 0; childIndex < childNodes - .getLength(); childIndex++) { - - child = childNodes.item(childIndex); - String nodeName = child.getNodeName(); - - if (nodeName.equalsIgnoreCase("ClickTracking")) { - value = XmlTools.getElementValue(child); - videoClicks.getClickTracking().add(value); - - } else if (nodeName.equalsIgnoreCase("ClickThrough")) { - value = XmlTools.getElementValue(child); - videoClicks.setClickThrough(value); - - } else if (nodeName.equalsIgnoreCase("CustomClick")) { - value = XmlTools.getElementValue(child); - videoClicks.getCustomClick().add(value); - } - } - } - } - - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - return null; - } - - return videoClicks; - } - - public List getImpressions() { - VASTLog.d(TAG, "getImpressions"); - - return getListFromXPath(impressionXPATH); - } - - public List getErrorUrl() { - - VASTLog.d(TAG, "getErrorUrl"); - - return getListFromXPath(errorUrlXPATH); - } - - - - private List getListFromXPath(String xPath) { - - VASTLog.d(TAG, "getListFromXPath"); - - ArrayList list = new ArrayList<>(); - - XPath xpath = XPathFactory.newInstance().newXPath(); - - try { - NodeList nodes = (NodeList) xpath.evaluate(xPath, - vastsDocument, XPathConstants.NODESET); - Node node; - - if (nodes != null) { - for (int i = 0; i < nodes.getLength(); i++) { - node = nodes.item(i); - list.add(XmlTools.getElementValue(node)); - } - } - - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - return null; - } - - return list; - - } - - - - private void writeObject(ObjectOutputStream oos) throws IOException { - VASTLog.d(TAG, "writeObject: about to write"); - oos.defaultWriteObject(); - - String data = XmlTools.xmlDocumentToString(vastsDocument); - // oos.writeChars(); - oos.writeObject(data); - VASTLog.d(TAG, "done writing"); - - } - - private void readObject(ObjectInputStream ois) - throws ClassNotFoundException, IOException { - VASTLog.d(TAG, "readObject: about to read"); - ois.defaultReadObject(); - - String vastString = (String) ois.readObject(); - VASTLog.d(TAG, "vastString data is:\n" + vastString + "\n"); - - vastsDocument = XmlTools.stringToDocument(vastString); - - VASTLog.d(TAG, "done reading"); - } - - public String getPickedMediaFileURL() { - return pickedMediaFileURL; - } - - public void setPickedMediaFileURL(String pickedMediaFileURL) { - this.pickedMediaFileURL = pickedMediaFileURL; - } - -} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VAST_DOC_ELEMENTS.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VAST_DOC_ELEMENTS.java deleted file mode 100644 index c03ca52..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VAST_DOC_ELEMENTS.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.model; - -public enum VAST_DOC_ELEMENTS { - - vastVersion("2.0"), - vasts("VASTS"), - vastAdTagURI("VASTAdTagURI"), - vastVersionAttribute("version"); - - private String value; - - VAST_DOC_ELEMENTS(String value) { - - this.value = value; - - } - - public String getValue() { - - return value; - } - -} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VideoClicks.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VideoClicks.java deleted file mode 100644 index 2db6450..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/VideoClicks.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.model; - -import java.util.ArrayList; -import java.util.List; - -public class VideoClicks { - - private String clickThrough; - private List clickTracking; - private List customClick; - - public String getClickThrough() { - - return clickThrough; - } - - public void setClickThrough(String clickThrough) { - - this.clickThrough = clickThrough; - } - - public List getClickTracking() { - - if (clickTracking == null) { - clickTracking = new ArrayList<>(); - } - return this.clickTracking; - } - - public List getCustomClick() { - - if (customClick == null) { - customClick = new ArrayList<>(); - } - return this.customClick; - } - - @Override - public String toString() { - - return "VideoClicks [clickThrough=" + clickThrough - + ", clickTracking=[" + listToString(clickTracking) - + "], customClick=[" + listToString(customClick) + "] ]"; - } - - private String listToString(List list) { - - if (list == null) { - return ""; - } - - StringBuilder sb = new StringBuilder(); - for (int x = 0; x < list.size(); x++) { - sb.append(list.get(x)); - } - return sb.toString(); - } -} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Companion.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Companion.java new file mode 100644 index 0000000..80470df --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Companion.java @@ -0,0 +1,185 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vast; + +import com.amazon.android.ads.vast.model.vmap.Tracking; +import com.amazon.android.ads.vast.model.vmap.VmapHelper; +import com.amazon.dynamicparser.impl.XmlParser; +import com.amazon.utils.ListUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * A representation of the Companion element of a VAST response. Note: currently only supports + * tracking events. + */ +public class Companion { + + /** + * Key to get the tracking events element. + */ + public static final String TRACKING_EVENTS_KEY = "TrackingEvents"; + + /** + * Key to get the tracking element. + */ + public static final String TRACKING_KEY = "Tracking"; + + /** + * Key to get the width attribute. + */ + private static final String WIDTH_KEY = "width"; + + /** + * Key to get the height attribute. + */ + private static final String HEIGHT_KEY = "height"; + + /** + * List of tracking events. + */ + private List mTrackingEvents; + + /** + * The companion id. + */ + private String mId; + + /** + * The width. + */ + private String mWidth; + + /** + * The height. + */ + private String mHeight; + + /** + * Constructor. + * + * @param companionMap A map containing the data needed to create a companion. + */ + public Companion(Map companionMap) { + + mTrackingEvents = new ArrayList<>(); + Map attributes = companionMap.get(XmlParser.ATTRIBUTES_TAG); + if (attributes != null) { + setId(attributes.get(VmapHelper.ID_KEY)); + setWidth(attributes.get(WIDTH_KEY)); + setHeight(attributes.get(HEIGHT_KEY)); + } + + Map trackingEventsMap = companionMap.get(TRACKING_EVENTS_KEY); + List trackingEventsList = ListUtils.getValueAsMapList(trackingEventsMap, + TRACKING_KEY); + for (Map trackingEventMap : trackingEventsList) { + mTrackingEvents.add(new Tracking(trackingEventMap)); + } + } + + /** + * Get the id. + * + * @return The id. + */ + public String getId() { + + return mId; + } + + /** + * Set the id. + * + * @param id The id. + */ + public void setId(String id) { + + mId = id; + } + + /** + * Get the width. + * + * @return The width. + */ + public String getWidth() { + + return mWidth; + } + + /** + * Set the width. + * + * @param width The width. + */ + public void setWidth(String width) { + + mWidth = width; + } + + /** + * Get the height. + * + * @return The height. + */ + public String getHeight() { + + return mHeight; + } + + /** + * Set the height. + * + * @param height The height. + */ + public void setHeight(String height) { + + mHeight = height; + } + + /** + * Get the list of trackings. + * + * @return List of trackings. + */ + public List getTrackings() { + + return mTrackingEvents; + } + + /** + * Set the trackings. + * + * @param trackings The list of trackings. + */ + public void setTrackings(List trackings) { + + mTrackingEvents = trackings; + } + + @Override + public String toString() { + + return "Companion{" + + "mTrackingEvents=" + mTrackingEvents + + ", mId='" + mId + '\'' + + ", mWidth='" + mWidth + '\'' + + ", mHeight='" + mHeight + '\'' + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/CompanionAd.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/CompanionAd.java new file mode 100644 index 0000000..3473cb0 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/CompanionAd.java @@ -0,0 +1,83 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vast; + +import com.amazon.utils.ListUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * A representation of the Companion Ad element of a VAST response. + */ +public class CompanionAd extends VastAd { + + private static final String COMPANION_KEY = "Companion"; + + /** + * List of Companion objects. + */ + private List mCompanions; + + /** + * Constructor. + * + * @param map A map containing the data needed to create the Companion Ad. + */ + CompanionAd(Map map) { + + super(); + mCompanions = new ArrayList<>(); + List companionsList = ListUtils.getValueAsMapList(map, COMPANION_KEY); + // Create all the companions. + for (Map companionMap : companionsList) { + Companion companion = new Companion(companionMap); + super.getTrackingEvents().addAll(companion.getTrackings()); + mCompanions.add(companion); + } + } + + /** + * Get the companions. + * + * @return List of companions. + */ + public List getCompanions() { + + return mCompanions; + } + + /** + * Set the companions. + * + * @param companions List of companions. + */ + public void setCompanions(List companions) { + + mCompanions = companions; + } + + + @Override + public String toString() { + + return "CompanionAd{" + + "mCompanions=" + mCompanions + + "mMediaFiles=" + super.getMediaFiles() + + ", mTrackingEvents=" + super.getTrackingEvents() + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Creative.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Creative.java new file mode 100644 index 0000000..c5108c8 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Creative.java @@ -0,0 +1,157 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vast; + +import com.amazon.android.ads.vast.model.vmap.VmapHelper; +import com.amazon.dynamicparser.impl.XmlParser; + +import java.util.Map; + +/** + * A representation of the Creative element of a VAST response. Note: does not support the + * Nonlinear element. + */ +public class Creative { + + /** + * Key to get the linear element. + */ + private static final String LINEAR_KEY = "Linear"; + + /** + * Key to get the sequence attribute. + */ + private static final String SEQUENCE_KEY = "sequence"; + + /** + * Key to get the companion ads element. + */ + private static final String COMPANION_ADS_KEY = "CompanionAds"; + + /** + * Key to get the VAST ad id for VAST 2.0 response. + */ + private static final String VAST_2_AD_ID_KEY = "AdID"; + + /** + * The creative id. + */ + private String mId; + + /** + * The sequence. + */ + private String mSequence; + + /** + * The Ad type. Should be either a LinearAd or CompanionAd. + */ + private VastAd mVastAd; + + /** + * Constructor. + * + * @param creativeMap The map that contains the data to create the creative. + */ + public Creative(Map creativeMap) { + + Map attributes = creativeMap.get(XmlParser.ATTRIBUTES_TAG); + if (attributes != null) { + if (attributes.containsKey(VmapHelper.ID_KEY)) { + setId(attributes.get(VmapHelper.ID_KEY)); + } + else { + setId(attributes.get(VAST_2_AD_ID_KEY)); + } + setSequence(attributes.get(SEQUENCE_KEY)); + } + if (creativeMap.containsKey(LINEAR_KEY)) { + mVastAd = new LinearAd(creativeMap.get(LINEAR_KEY)); + } + else if (creativeMap.containsKey(COMPANION_ADS_KEY)) { + mVastAd = new CompanionAd(creativeMap.get(COMPANION_ADS_KEY)); + } + } + + /** + * Get id. + * + * @return The id. + */ + public String getId() { + + return mId; + } + + /** + * Set the id. + * + * @param id The id. + */ + public void setId(String id) { + + mId = id; + } + + /** + * Get the sequence. + * + * @return The sequence. + */ + public String getSequence() { + + return mSequence; + } + + /** + * Set the sequence. + * + * @param sequence The sequence. + */ + public void setSequence(String sequence) { + + mSequence = sequence; + } + + /** + * Get the ad. + * + * @return The ad. + */ + public VastAd getVastAd() { + + return mVastAd; + } + + /** + * Set the ad. + * + * @param vastAd The ad. + */ + public void setVastAd(VastAd vastAd) { + + mVastAd = vastAd; + } + + @Override + public String toString() { + + return "Creative{" + + "mId='" + mId + '\'' + + ", mSequence='" + mSequence + '\'' + + ", mVastAd=" + mVastAd + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Inline.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Inline.java new file mode 100644 index 0000000..0dd0c59 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/Inline.java @@ -0,0 +1,211 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vast; + +import com.amazon.android.ads.vast.model.vmap.Tracking; +import com.amazon.android.ads.vast.model.vmap.VmapHelper; +import com.amazon.dynamicparser.impl.XmlParser; +import com.amazon.utils.ListUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * A representation of the Inline element of a VAST response. Contains all the files and URIs + * necessary to display the ad. + */ +public class Inline { + + /** + * Key to get the creatives element. + */ + private static final String CREATIVES_KEY = "Creatives"; + + /** + * Key to get the creative element. + */ + private static final String CREATIVE_KEY = "Creative"; + + /** + * The ad id. + */ + private String mId; + + /** + * A list of creatives. + */ + private List mCreatives; + + /** + * A list of impressions. + */ + private List mImpressions; + + /** + * A list of error URLs. + */ + private List mErrorUrls; + + /** + * Constructor. + * + * @param adMap A map containing the data necessary for creating the inline ad. + */ + public Inline(Map adMap) { + + mCreatives = new ArrayList<>(); + mImpressions = new ArrayList<>(); + mErrorUrls = new ArrayList<>(); + + Map attributes = adMap.get(XmlParser.ATTRIBUTES_TAG); + if (attributes != null) { + setId(attributes.get(VmapHelper.ID_KEY)); + } + + if (adMap.containsKey((VmapHelper.INLINE_KEY))) { + Map inLineMap = adMap.get(VmapHelper.INLINE_KEY); + + Map creativesMap = inLineMap.get(CREATIVES_KEY); + if (creativesMap != null) { + List creativeList = ListUtils.getValueAsMapList(creativesMap, CREATIVE_KEY); + + for (Map creativeMap : creativeList) { + mCreatives.add(new Creative(creativeMap)); + } + } + if (inLineMap.containsKey(VmapHelper.IMPRESSION_KEY)) { + mImpressions.addAll(VmapHelper.getStringListFromMap(inLineMap, + VmapHelper.IMPRESSION_KEY)); + } + + if (inLineMap.containsKey(VmapHelper.ERROR_ELEMENT_KEY)) { + mErrorUrls.addAll(VmapHelper.getStringListFromMap(inLineMap, + VmapHelper.ERROR_ELEMENT_KEY)); + } + } + } + + /** + * Get the id. + * + * @return The id. + */ + public String getId() { + + return mId; + } + + /** + * Set the id. + * + * @param id The id. + */ + public void setId(String id) { + + mId = id; + } + + /** + * Get the list of creatives. + * + * @return List of creatives. + */ + public List getCreatives() { + + return mCreatives; + } + + /** + * Set the list of creatives. + * + * @param creatives List of creatives. + */ + public void setCreatives(List creatives) { + + mCreatives = creatives; + } + + /** + * Get the list of impressions. + * + * @return List of impressions. + */ + public List getImpressions() { + + return mImpressions; + } + + /** + * Set the list of impressions. + * + * @param impressions List of impressions. + */ + public void setImpressions(List impressions) { + + mImpressions = impressions; + } + + /** + * Get a list of media files from all the creatives of this ad. + * + * @return List of media files. + */ + public List getMediaFiles() { + + List mediaFiles = new ArrayList<>(); + for (Creative creative : mCreatives) { + mediaFiles.addAll(creative.getVastAd().getMediaFiles()); + } + return mediaFiles; + } + + /** + * Get a map of tracking events from all the creatives of this ad. + * + * @return Map of tracking events. + */ + public HashMap> getTrackingEvents() { + + HashMap> trackingEventMap = new HashMap<>(); + for (Creative creative : mCreatives) { + List trackingList = creative.getVastAd().getTrackingEvents(); + Tracking.addTrackingEventsToMap(trackingEventMap, trackingList); + } + return trackingEventMap; + } + + /** + * Get the list of error URLs. + * + * @return List of error URLs. + */ + public List getErrorUrls() { + + return mErrorUrls; + } + + @Override + public String toString() { + + return "Inline{" + + "mId='" + mId + '\'' + + ", mCreatives=" + mCreatives + + ", mImpressions=" + mImpressions + + ", mErrorUrls=" + mErrorUrls + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/LinearAd.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/LinearAd.java new file mode 100644 index 0000000..93f773c --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/LinearAd.java @@ -0,0 +1,115 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vast; + +import com.amazon.android.ads.vast.model.vmap.Tracking; +import com.amazon.android.ads.vast.model.vmap.VmapHelper; +import com.amazon.dynamicparser.impl.XmlParser; +import com.amazon.utils.ListUtils; + +import java.util.List; +import java.util.Map; + +/** + * A representation of a Linear element of a VAST response. Note: Omits parsing the VideoClicks + * element since it doesn't make sense for the TV environment. + */ +public class LinearAd extends VastAd { + + /** + * Key to get MediaFiles element. + */ + private static final String MEDIA_FILES_KEY = "MediaFiles"; + + /** + * Key to get MediaFile element. + */ + private static final String MEDIA_FILE_KEY = "MediaFile"; + + /** + * Key to get TrackingEvents element. + */ + private static final String TRACKING_EVENTS_KEY = "TrackingEvents"; + + /** + * Key to get Duration element. + */ + private static final String DURATION_KEY = "Duration"; + + /** + * The ad duration of the linear creative. "HH:MM.SS.mmm" format. + */ + private String mDuration; + + /** + * Constructor. + * + * @param linearAdMap A map containing the info needed to create the linear ad. + */ + public LinearAd(Map linearAdMap) { + + super(); + + if (linearAdMap != null) { + + Map mediaFilesMap = linearAdMap.get(MEDIA_FILES_KEY); + List mediaFilesList = ListUtils.getValueAsMapList(mediaFilesMap, MEDIA_FILE_KEY); + for (Map mediaFileMap : mediaFilesList) { + super.addMediaFile(new MediaFile(mediaFileMap)); + } + + Map trackingEventsMap = linearAdMap.get(TRACKING_EVENTS_KEY); + List trackingList = + ListUtils.getValueAsMapList(trackingEventsMap, VmapHelper.TRACKING_KEY); + + for (Map trackingMap : trackingList) { + super.addTrackingEvent(new Tracking(trackingMap)); + } + + Map durationMap = linearAdMap.get(DURATION_KEY); + setDuration(durationMap.get(XmlParser.TEXT_TAG)); + } + } + + /** + * Get the duration. + * + * @return The duration. + */ + public String getDuration() { + + return mDuration; + } + + /** + * Set the duration. + * + * @param duration The duration. + */ + public void setDuration(String duration) { + + mDuration = duration; + } + + @Override + public String toString() { + + return "LinearAd{" + + "mDuration='" + mDuration + '\'' + + "mMediaFiles=" + super.getMediaFiles() + + ", mTrackingEvents=" + super.getTrackingEvents() + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/MediaFile.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/MediaFile.java new file mode 100644 index 0000000..af8361b --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/MediaFile.java @@ -0,0 +1,361 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vast; + +import com.amazon.android.ads.vast.model.vmap.VmapHelper; +import com.amazon.dynamicparser.impl.XmlParser; + +import java.math.BigInteger; +import java.util.Map; + +/** + * A representation of the MediaFile element of a VAST response. + */ +public class MediaFile { + + /** + * Key to get the maintain aspect ratio attribute. + */ + private static final String MAINTAIN_ASPECT_RATIO_KEY = "maintainAspectRatio"; + + /** + * Key to get the height attribute. + */ + private static final String HEIGHT_KEY = "height"; + + /** + * Key to get the width attribute. + */ + private static final String WIDTH_KEY = "width"; + + /** + * Key to get the bitrate attribute. + */ + private static final String BITRATE_KEY = "bitrate"; + + /** + * Key to get the scalable attribute. + */ + private static final String SCALABLE_KEY = "scalable"; + + /** + * Key to get type attribute. + */ + private static final String TYPE_KEY = "type"; + + /** + * Key to get the delivery attribute. + */ + private static final String DELIVERY_KEY = "delivery"; + + /** + * Key to get the api framework attribute. + */ + private static final String API_FRAMEWORK_KEY = "apiFramework"; + + /** + * The ad URL value. + */ + private String mValue; + + /** + * The id. + */ + private String mId; + + /** + * The delivery protocol. + */ + private String mDelivery; + + /** + * The MIME type for the file container. + */ + private String mType; + + /** + * The average bitrate for the media file. + */ + private BigInteger mBitrate; + + /** + * The native width of the video file, in pixels. + */ + private BigInteger mWidth; + + /** + * The native height of the video file, in pixels. + */ + private BigInteger mHeight; + + /** + * Whether the media file is meant to scale to larger dimensions. + */ + private boolean mScalable; + + /** + * Whether the aspect ratio for media file dimensions should be maintained when scaled to + * larger dimensions. + */ + private boolean mMaintainAspectRatio; + + /** + * The API needed to execute an interactive media file. + */ + private String mApiFramework; + + /** + * Constructor. + * + * @param mediaFileMap A map containing the data needed to create the media file. + */ + public MediaFile(Map mediaFileMap) { + + if (mediaFileMap != null) { + + setValue(VmapHelper.getTextValueFromMap(mediaFileMap)); + Map attributes = mediaFileMap.get(XmlParser.ATTRIBUTES_TAG); + if (attributes != null) { + setId(attributes.get(VmapHelper.ID_KEY)); + setDelivery(attributes.get(DELIVERY_KEY)); + setType(attributes.get(TYPE_KEY)); + setBitrate(BigInteger.valueOf(Long.valueOf(attributes.get(BITRATE_KEY)))); + setWidth(BigInteger.valueOf(Long.valueOf(attributes.get(WIDTH_KEY)))); + setHeight(BigInteger.valueOf(Long.valueOf(attributes.get(HEIGHT_KEY)))); + setScalable(Boolean.valueOf(attributes.get(SCALABLE_KEY))); + setMaintainAspectRatio(Boolean.valueOf(attributes.get(MAINTAIN_ASPECT_RATIO_KEY))); + setApiFramework(attributes.get(API_FRAMEWORK_KEY)); + } + } + } + + /** + * Get the ad URL value. + * + * @return The value. + */ + public String getValue() { + + return mValue; + } + + /** + * Set the value. + * + * @param value The value. + */ + public void setValue(String value) { + + mValue = value; + } + + /** + * Get the id. + * + * @return The id. + */ + public String getId() { + + return mId; + } + + /** + * Set the id. + * + * @param id The id. + */ + public void setId(String id) { + + mId = id; + } + + /** + * Get the delivery. + * + * @return The delivery. + */ + public String getDelivery() { + + return mDelivery; + } + + /** + * Set the delivery. + * + * @param delivery The delivery. + */ + public void setDelivery(String delivery) { + + mDelivery = delivery; + } + + /** + * Get the type. + * + * @return The type. + */ + public String getType() { + + return mType; + } + + /** + * Set the type. + * + * @param type The type. + */ + public void setType(String type) { + + mType = type; + } + + /** + * Get the bitrate. + * + * @return The bitrate. + */ + public BigInteger getBitrate() { + + return mBitrate; + } + + /** + * Set the bitrate. + * + * @param bitrate The bitrate. + */ + public void setBitrate(BigInteger bitrate) { + + mBitrate = bitrate; + } + + /** + * Get the width. + * + * @return The width. + */ + public BigInteger getWidth() { + + return mWidth; + } + + /** + * Set the width. + * + * @param width The width. + */ + public void setWidth(BigInteger width) { + + mWidth = width; + } + + /** + * Get the height. + * + * @return The height. + */ + public BigInteger getHeight() { + + return mHeight; + } + + /** + * Set the height. + * + * @param height The height. + */ + public void setHeight(BigInteger height) { + + mHeight = height; + } + + /** + * Whether the media file is meant to scale to larger dimensions or not. + * + * @return True if it can be scaled, false otherwise. + */ + public boolean isScalable() { + + return mScalable; + } + + /** + * Set the scalable boolean. + * + * @param scalable True if its meant to be scaled, false otherwise. + */ + public void setScalable(boolean scalable) { + + mScalable = scalable; + } + + /** + * Whether the aspect ratio for media file dimensions should be maintained when scaled to new + * dimensions or not. + * + * @return True if the aspect ratio should be maintained, false otherwise. + */ + public boolean isMaintainAspectRatio() { + + return mMaintainAspectRatio; + } + + /** + * Set the maintain aspect ratio boolean. + * + * @param maintainAspectRatio True if the aspect ratio should be maintained, false otherwise. + */ + public void setMaintainAspectRatio(boolean maintainAspectRatio) { + + mMaintainAspectRatio = maintainAspectRatio; + } + + /** + * Get the API framework needed to execute an interactive media file. + * + * @return The API framework. + */ + public String getApiFramework() { + + return mApiFramework; + } + + /** + * Set the API framework needed to execute an interactive media file. + * + * @param apiFramework The API framework + */ + public void setApiFramework(String apiFramework) { + + mApiFramework = apiFramework; + } + + @Override + public String toString() { + + return "MediaFile{" + + "mValue='" + mValue + '\'' + + ", mId='" + mId + '\'' + + ", mDelivery='" + mDelivery + '\'' + + ", mType='" + mType + '\'' + + ", mBitrate=" + mBitrate + + ", mWidth=" + mWidth + + ", mHeight=" + mHeight + + ", mScalable=" + mScalable + + ", mMaintainAspectRatio=" + mMaintainAspectRatio + + ", mApiFramework='" + mApiFramework + '\'' + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/VastAd.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/VastAd.java new file mode 100644 index 0000000..09cb791 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/VastAd.java @@ -0,0 +1,115 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vast; + + +import com.amazon.android.ads.vast.model.vmap.Tracking; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class contains common properties of an ad from within a creative element of a vast response. + */ +public class VastAd { + + /** + * A list of media files. + */ + private List mMediaFiles; + + /** + * A list of tracking events. + */ + private List mTrackingEvents; + + /** + * Constructor. + */ + public VastAd() { + + mMediaFiles = new ArrayList<>(); + mTrackingEvents = new ArrayList<>(); + } + + /** + * Add a media file. + * + * @param mediaFile The media file. + */ + public void addMediaFile(MediaFile mediaFile) { + + mMediaFiles.add(mediaFile); + } + + /** + * Get the media files. + * + * @return List of media files. + */ + public List getMediaFiles() { + + return mMediaFiles; + } + + /** + * Set the media files list. + * + * @param mediaFiles List of media files. + */ + public void setMediaFiles(List mediaFiles) { + + mMediaFiles = mediaFiles; + } + + /** + * Add a tracking event. + * + * @param tracking The tracking event. + */ + public void addTrackingEvent(Tracking tracking) { + + mTrackingEvents.add(tracking); + } + + /** + * Get tracking events. + * + * @return List of tracking events. + */ + public List getTrackingEvents() { + + return mTrackingEvents; + } + + /** + * Set the tracking events. + * + * @param trackingEvents List of tracking events. + */ + public void setTrackingEvents(List trackingEvents) { + + mTrackingEvents = trackingEvents; + } + + @Override + public String toString() { + + return "VastAd{" + + "mMediaFiles=" + mMediaFiles + + ", mTrackingEvents=" + mTrackingEvents + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/VastResponse.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/VastResponse.java new file mode 100644 index 0000000..090c585 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vast/VastResponse.java @@ -0,0 +1,349 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vast; + +import com.amazon.ads.IAds; +import com.amazon.android.ads.vast.model.vmap.Tracking; +import com.amazon.android.ads.vast.model.vmap.VmapHelper; +import com.amazon.android.utils.NetworkUtils; +import com.amazon.android.utils.PathHelper; +import com.amazon.dynamicparser.IParser; +import com.amazon.dynamicparser.impl.XmlParser; + +import android.util.Log; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * This class represents a VAST response. + */ +public class VastResponse { + + private static final String TAG = VastResponse.class.getSimpleName(); + + /** + * Value for VAST version 3. + */ + public static final String VAST_3 = "vast3"; + + /** + * Value for VAST version 2. + */ + public static final String VAST_2 = "vast2"; + + /** + * Value for VAST version 1. + */ + public static final String VAST_1 = "vast1"; + + /** + * Another value for VAST version 1. + */ + public static final String VAST = "vast"; + + /** + * Key to get the version attribute. + */ + private static final String VERSION_KEY = "version"; + + /** + * Key to get the ad element. + */ + private static final String AD_KEY = "Ad"; + + /** + * Key to get the wrapper element. + */ + private static final String WRAPPER_ELEMENT_KEY = "Wrapper"; + + /** + * Key to get the VAST ad tag URI element. + */ + private static final String VASTADTAGURI_ELEMENT_KEY = "VASTAdTagURI"; + + /** + * Path for the TrackingEvents element. + */ + private static final String TRACKING_EVENTS_PATH = "Creatives/Creative/Linear/TrackingEvents"; + + /** + * The official version with which the response is complaint. + */ + private String mVersion; + + /** + * The Inline element. + */ + private List mInlineAds; + + /** + * Constructor. + */ + public VastResponse() { + + mInlineAds = new ArrayList<>(); + } + + /** + * Creates a instance of a VAST response given the parsed xml data. + * + * @param xmlMap A map representing the parsed xml response. + * @return An VAST response instance. + */ + public static VastResponse createInstance(Map xmlMap) { + + VastResponse vastResponse = new VastResponse(); + Log.d(TAG, "Creating VAST response from xml map"); + + Map attributes = xmlMap.get(XmlParser.ATTRIBUTES_TAG); + + if (attributes != null) { + vastResponse.setVersion(attributes.get(VERSION_KEY)); + Object adElementObject = xmlMap.get(AD_KEY); + if (adElementObject == null) { + Log.d(TAG, "No ad found in vast response"); + return vastResponse; + } + + if (adElementObject instanceof List) { + for (Map map : (List>) adElementObject) { + processAdElement(map, vastResponse); + } + } + else { + processAdElement((Map) adElementObject, vastResponse); + } + } + return vastResponse; + } + + /** + * Helper method to process ad element. It will either process the wrapper withing the ad + * element or create inlines (whichever is available in the map). + * + * @param map The map containing the ad element data to process. + * @param vastResponse The original VAST response object. + */ + private static void processAdElement(Map map, VastResponse vastResponse) { + + if (map.containsKey(WRAPPER_ELEMENT_KEY)) { + processWrapper(map.get(WRAPPER_ELEMENT_KEY), vastResponse); + } + else { + vastResponse.getInlineAds().add(new Inline(map)); + } + } + + /** + * Process the wrapper element. Creates a VastResponse from the VASTAdTagURI element and then + * ads the wrapper's impression URL, error URL, and linear tracking events to the Inline ads of + * the VastResponse. + * + * @param wrapperMap The map containing the wrapper data. + * @param vastResponse The original VAST response object. + */ + private static void processWrapper(Map wrapperMap, VastResponse + vastResponse) { + + // Process the VastAdTagURI to get wrapped VAST response. + String vastAdTagUri = VmapHelper.getTextValueFromMap(wrapperMap.get + (VASTADTAGURI_ELEMENT_KEY)); + VastResponse wrappedVastResponse = createInstance(vastAdTagUri); + + // Add the creative's tracking events from the wrapper to the inline ad. + Map trackingEventsMap = + PathHelper.getMapByPath((Map) wrapperMap, TRACKING_EVENTS_PATH); + + // Add the impression, error url, and tracking events to each creative of each inline add. + for (Inline inline : wrappedVastResponse.getInlineAds()) { + for (Map trackingMap : (List) trackingEventsMap.get(VmapHelper.TRACKING_KEY)) { + for (Creative creative : inline.getCreatives()) { + creative.getVastAd().addTrackingEvent(new Tracking(trackingMap)); + } + } + // Add the impression to the inline + if (wrapperMap.containsKey(VmapHelper.IMPRESSION_KEY)) { + inline.getImpressions().addAll( + VmapHelper.getStringListFromMap(wrapperMap, VmapHelper.IMPRESSION_KEY)); + } + // Add the error url to the inline + if (wrapperMap.containsKey(VmapHelper.ERROR_ELEMENT_KEY)) { + inline.getErrorUrls().addAll( + VmapHelper.getStringListFromMap(wrapperMap, VmapHelper.ERROR_ELEMENT_KEY)); + } + + // Add the inline ad to the original vast response object. + vastResponse.getInlineAds().add(inline); + } + } + + /** + * Create an instance given an ad tag URL. Downloads the data from the URL, parses it, and + * creates the VAST response object based on the parsed data. + * + * Note: This method should be called off the UI thread. + * + * @param adTag The URL to get the VAST response from. + * @return A VAST response instance. + */ + public static VastResponse createInstance(String adTag) { + + Log.d(TAG, "Processing ad url string for vast model"); + String xmlData; + try { + adTag = NetworkUtils.addParameterToUrl(adTag, IAds.CORRELATOR_PARAMETER, + "" + System.currentTimeMillis()); + xmlData = NetworkUtils.getDataLocatedAtUrl(adTag); + } + catch (IOException e) { + Log.e(TAG, "Could not get data from url " + adTag, e); + return null; + } + + XmlParser parser = new XmlParser(); + try { + Map xmlMap = (Map) parser.parse(xmlData); + + if (xmlMap != null) { + Log.d(TAG, "Wrapping VAST response with VMAP"); + return VastResponse.createInstance(xmlMap); + } + } + catch (IParser.InvalidDataException e) { + Log.e(TAG, "Data could not be parsed. ", e); + } + Log.e(TAG, "Error creating vast model from ad tag."); + return null; + } + + /** + * Get the version. + * + * @return The version. + */ + public String getVersion() { + + return mVersion; + } + + /** + * Set the version. + * + * @param version The version. + */ + public void setVersion(String version) { + + mVersion = version; + } + + /** + * Get the inline ads. + * + * @return The inline ads. + */ + public List getInlineAds() { + + return mInlineAds; + } + + /** + * Set the inline ads. + * + * @param inlineAds The inline ads. + */ + public void setInlineAds(List inlineAds) { + + mInlineAds = inlineAds; + } + + /** + * Gets all the media files from the inline. + * + * @return List of media files. + */ + public List getMediaFiles() { + + ArrayList mediaFiles = new ArrayList<>(); + for (Inline inline : mInlineAds) { + + mediaFiles.addAll(inline.getMediaFiles()); + } + return mediaFiles; + } + + /** + * Gets all the impressions from the inline. + * + * @return List of impression strings. + */ + public List getImpressions() { + + List impressions = new ArrayList<>(); + for (Inline inline : mInlineAds) { + + impressions.addAll(inline.getImpressions()); + } + return impressions; + } + + /** + * Gets all the tracking URLs from the inline. + * + * @return Map of tracking events and their corresponding URLs. + */ + public Map> getTrackingUrls() { + + Map> sortedMap = new HashMap<>(); + for (Inline inline : mInlineAds) { + HashMap> map = inline.getTrackingEvents(); + for (String key : map.keySet()) { + if (sortedMap.containsKey(key)) { + sortedMap.get(key).addAll(map.get(key)); + } + else { + sortedMap.put(key, map.get(key)); + } + } + } + return sortedMap; + } + + /** + * Get the error URLs from the inline. + * + * @return List of error URLs. + */ + public List getErrorUrls() { + + List errorUrls = new ArrayList<>(); + for (Inline inline : mInlineAds) { + errorUrls.addAll(inline.getErrorUrls()); + } + return errorUrls; + } + + @Override + public String toString() { + + return "VastResponse{" + + "mVersion='" + mVersion + '\'' + + ", mInlineAds=" + mInlineAds + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdBreak.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdBreak.java new file mode 100644 index 0000000..ab49eb0 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdBreak.java @@ -0,0 +1,444 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vmap; + +import com.amazon.android.ads.vast.model.vast.MediaFile; +import com.amazon.dynamicparser.impl.XmlParser; +import com.amazon.utils.DateAndTimeHelper; +import com.amazon.utils.ListUtils; + +import android.util.Log; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Represents a single ad break. Each ad break may have multiple ads. + */ +public class AdBreak { + + private static final String TAG = AdBreak.class.getSimpleName(); + + /** + * Key to get the extensions element. + */ + public static final String EXTENSIONS_KEY = "vmap:Extensions"; + + /** + * Key to get the extension element. + */ + public static final String EXTENSION_KEY = "vmap:Extension"; + + /** + * Key to get the time offset attribute. + */ + private static final String TIME_OFFSET_ATTR = "timeOffset"; + + /** + * Key to get the break type attribute. + */ + private static final String BREAK_TYPE_ATTR = "breakType"; + + /** + * Key to get the break id attribute. + */ + private static final String BREAK_ID_ATTR = "breakId"; + + /** + * Key to get the repeat after attribute. + */ + private static final String REPEAT_AFTER_ATTR = "repeatAfter"; + + /** + * Key to get the ad source element. + */ + private static final String AD_SOURCE_KEY = "vmap:AdSource"; + + /** + * Key to get the tracking events element. + */ + private static final String TRACKING_EVENTS_KEY = "vmap:TrackingEvents"; + + /** + * Key to get the tracking event element. + */ + private static final String TRACKING_EVENT_KEY = "vmap:Tracking"; + + /** + * Value to represent that the ad should be played at the start of the content. + */ + public static final String TIME_OFFSET_START = "start"; + + /** + * Value to represent that the ad should be played at the end of the content. + */ + public static final String TIME_OFFSET_END = "end"; + + /** + * Value to represent a linear break type. + */ + public static final String BREAK_TYPE_LINEAR = "linear"; + + /** + * hh:mm:ss.mmm, "start", "end", n% (n is an integer from 0-100), #m (m represents sequence + * and is an integer > 0) + */ + private String mTimeOffset; // required + + /** + * Suggested hint to the player. + */ + private String mBreakType; // required + + /** + * ID of the ad break. + */ + private String mBreakId; // optional + + /** + * Optional indicator that instructs the video player to repeat the same AdBreak and AdSource + * at time offsets equal to the duration value of this attribute. Expressed in time format + * HH.MM.SS[.mmm] + */ + private String mRepeatAfter; // optional + + /** + * Represents the ad data that will be used to fill the ad break. + */ + private AdSource mAdSource; // optional + + /** + * The tracking events. + */ + private List mTrackingEvents; // optional + + /** + * Container for Extensions that provide ability to express information not supported by VMAP. + */ + private List mExtensions; // optional + + /** + * The selected media file. This will be used to display the ad video. + */ + private String mSelectedMediaFileUrl; + + /** + * Constructor. + */ + public AdBreak() { + + } + + /** + * Constructor. + * + * @param adBreakMap A map containing the data required to create an ad break. + */ + public AdBreak(Map adBreakMap) { + + if (adBreakMap == null) { + Log.e(TAG, "Data map for constructing ad source cannot be null"); + throw new IllegalArgumentException("Data map parameter cannot be null"); + } + + Map attributeMap = + (Map) adBreakMap.get(XmlParser.ATTRIBUTES_TAG); + + setTimeOffset(attributeMap.get(TIME_OFFSET_ATTR)); + setBreakType(attributeMap.get(BREAK_TYPE_ATTR)); + setBreakId(attributeMap.get(BREAK_ID_ATTR)); + setRepeatAfter(attributeMap.get(REPEAT_AFTER_ATTR)); + + Map adSourceMap = (Map) adBreakMap.get(AD_SOURCE_KEY); + setAdSource(new AdSource(adSourceMap)); + + mExtensions = new ArrayList<>(); + Map extensionsMap = (Map) adBreakMap.get(VmapHelper + .EXTENSIONS_KEY); + if (extensionsMap != null) { + mExtensions.addAll(VmapHelper.createExtensions(extensionsMap)); + } + + mTrackingEvents = new ArrayList<>(); + Map trackingEventsMap = (Map) adBreakMap.get(TRACKING_EVENTS_KEY); + if (trackingEventsMap != null) { + createTrackingEvents(trackingEventsMap); + } + } + + /** + * Get the time offset. + * + * @return The time offset. + */ + + public String getTimeOffset() { + + return mTimeOffset; + } + + /** + * Set the time offset. + * + * @param timeOffset The time offset. + */ + public void setTimeOffset(String timeOffset) { + + mTimeOffset = timeOffset; + } + + /** + * Get the break type. + * + * @return The break type. + */ + public String getBreakType() { + + return mBreakType; + } + + /** + * Set the break type. + * + * @param breakType The break type. + */ + public void setBreakType(String breakType) { + + mBreakType = breakType; + } + + /** + * Get the break id. + * + * @return The break id. + */ + public String getBreakId() { + + return mBreakId; + } + + /** + * Set the break id. + * + * @param breakId The break id. + */ + public void setBreakId(String breakId) { + + mBreakId = breakId; + } + + /** + * Get the repeat after option. + * + * @return The repeat after option. + */ + public String getRepeatAfter() { + + return mRepeatAfter; + } + + /** + * Set the repeat after option. + * + * @param repeatAfter The repeat after option. + */ + public void setRepeatAfter(String repeatAfter) { + + mRepeatAfter = repeatAfter; + } + + /** + * Get the ad source. + * + * @return The ad source. + */ + public AdSource getAdSource() { + + return mAdSource; + } + + /** + * Set the ad source. + * + * @param adSource The ad source. + */ + public void setAdSource(AdSource adSource) { + + mAdSource = adSource; + } + + /** + * Get the tracking events. + * + * @return The tracking events. + */ + public List getTrackingEvents() { + + return mTrackingEvents; + } + + /** + * Set the tracking events. + * + * @param trackingEvents The tracking events. + */ + public void setTrackingEvents(List trackingEvents) { + + mTrackingEvents = trackingEvents; + } + + /** + * Get the extensions. + * + * @return The extensions. + */ + public List getExtensions() { + + return mExtensions; + } + + /** + * Set the extensions. + * + * @param extensions The extensions. + */ + public void setExtensions(List extensions) { + + mExtensions = extensions; + } + + /** + * Get the time offset converted to seconds. + * + * @return Time offset in seconds. + */ + public double getConvertedTimeOffset() { + + // TODO: handle other time offsets (DEVTECH-4139) + return DateAndTimeHelper.convertDateFormatToSeconds(mTimeOffset); + } + + /** + * Get the selected media file URL. + * + * @return The selected media file URL. + */ + public String getSelectedMediaFileUrl() { + + return mSelectedMediaFileUrl; + } + + /** + * Set the selected media file URL. This URL will be used to play the video. + * + * @param selectedMediaFileUrl The selected media file URL. + */ + public void setSelectedMediaFileUrl(String selectedMediaFileUrl) { + + mSelectedMediaFileUrl = selectedMediaFileUrl; + } + + /** + * Get the media files from the ad source. + * + * @return List of media files. + */ + public List getMediaFiles() { + + List mediaFiles = new ArrayList<>(); + if (mAdSource != null && mAdSource.getVastResponse() != null) { + mediaFiles.addAll(mAdSource.getVastResponse().getMediaFiles()); + } + + return mediaFiles; + } + + /** + * Get the impressions from the ad source. + * + * @return List of the impression strings. + */ + public List getImpressions() { + + List impressions = new ArrayList<>(); + if (mAdSource != null && mAdSource.getVastResponse() != null) { + impressions.addAll(mAdSource.getVastResponse().getImpressions()); + } + + return impressions; + } + + /** + * Get the tracking URLs from the ad source. + * + * @return List of tracking URLs. + */ + public HashMap> getTrackingUrls() { + + HashMap> trackingUrls = new HashMap<>(); + + if (getTrackingEvents() != null && getTrackingEvents().size() > 0) { + Tracking.addTrackingEventsToMap(trackingUrls, getTrackingEvents()); + } + else if (getAdSource().getVastResponse() != null) { + trackingUrls.putAll(getAdSource().getVastResponse().getTrackingUrls()); + } + + return trackingUrls; + } + + /** + * Get the error URLs from the ad source. + * + * @return List of error URLs. + */ + public List getErrorUrls() { + + return null; + } + + /** + * Creates the tracking events for the ad break. + * + * @param trackingEventsMap Data map containing the info needed to create the tracking events. + */ + private void createTrackingEvents(Map trackingEventsMap) { + + List trackingEventsList = ListUtils.getValueAsMapList + (trackingEventsMap, TRACKING_EVENT_KEY); + + for (Map trackingMap : trackingEventsList) { + mTrackingEvents.add(new Tracking(trackingMap)); + } + + } + + @Override + public String toString() { + + return "AdBreak{" + + "mTimeOffset='" + mTimeOffset + '\'' + + ", mBreakType='" + mBreakType + '\'' + + ", mBreakId='" + mBreakId + '\'' + + ", mRepeatAfter='" + mRepeatAfter + '\'' + + ", mAdSource=" + mAdSource + + ", mTrackingEvents=" + mTrackingEvents + + ", mExtensions=" + mExtensions + + ", mSelectedMediaFileUrl='" + mSelectedMediaFileUrl + '\'' + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdSource.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdSource.java new file mode 100644 index 0000000..da6e694 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdSource.java @@ -0,0 +1,293 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vmap; + +import com.amazon.android.ads.vast.model.vast.VastResponse; +import com.amazon.dynamicparser.impl.XmlParser; + +import android.util.Log; + +import java.util.Map; + +/** + * Provides the player with either an inline ad response or reference to an ad response. The ad + * response should be in the form of one of the following: VAST ad response, custom ad response, or + * ad tag URI. + */ +public class AdSource { + + private static final String TAG = AdSource.class.getSimpleName(); + + /** + * Key to get the allow multiple ads attribute. + */ + private static final String ALLOW_MULTIPLE_ADS_KEY = "allowMultipleAds"; + + /** + * Key to get the follow redirects attribute. + */ + private static final String FOLLOW_REDIRECTS_KEY = "followRedirects"; + + /** + * Key to get the ad tag uri element. + */ + private static final String AD_TAG_URI_KEY = "vmap:AdTagURI"; + + /** + * Key to get the custom data element. + */ + private static final String CUSTOM_AD_DATA_KEY = "vmap:CustomAdData"; + + /** + * Key to get the VAST ad data element. + */ + private static final String VAST_AD_DATA_KEY = "vmap:VASTAdData"; + + /** + * The ad source id. + */ + private String mId; // optional + + /** + * Indicates whether the player should select and play only a single ad from the ad response + * document, or play multiple ads. If not specified, left to the video player's discretion. + * Non-VAST ad pods may be ignored. + */ + private boolean mAllowMultipleAds = true; // optional + + /** + * Whether the player should follow wrappers/redirects in the ad response document. If not + * specified, left to the video player’s discretion + */ + private boolean mFollowRedirects; // optional + + /** + * A VAST 3.0 document that comprises the ad response document. Not contained within a CDATA. + */ + private VastResponse mVastResponse; + + /** + * An ad response document that is not VAST 3.0. + */ + private CustomAdData mCustomAdData; + + /** + * A URL to a secondary ad server that will provide the ad response document. + */ + private AdTagURI mAdTagURI; + + /** + * Constructor. + */ + public AdSource() { + + } + + /** + * Constructor. + * + * @param adSourceMap A map containing the data needed to create the ad source object. + */ + public AdSource(Map adSourceMap) { + + if (adSourceMap == null) { + Log.e(TAG, "Data map for constructing ad source cannot be null"); + throw new IllegalArgumentException("Data map parameter cannot be null"); + } + + Map attributeMap = + (Map) adSourceMap.get(XmlParser.ATTRIBUTES_TAG); + + setId(attributeMap.get(VmapHelper.ID_KEY)); + setAllowMultipleAds(Boolean.valueOf(attributeMap.get(ALLOW_MULTIPLE_ADS_KEY))); + setFollowRedirects(Boolean.valueOf(attributeMap.get(FOLLOW_REDIRECTS_KEY))); + + if (adSourceMap.get(AD_TAG_URI_KEY) != null) { + Map adTagUriMap = (Map) adSourceMap.get(AD_TAG_URI_KEY); + // Check that the ad tag URI is for a VAST template. If so, parse the VAST ad tag URI. + if (isAdTagUriVast(adTagUriMap)) { + String adTag = VmapHelper.getTextValueFromMap(adSourceMap.get(AD_TAG_URI_KEY)); + setVastResponse(VastResponse.createInstance(adTag)); + } + else { + setAdTagURI(new AdTagURI(adSourceMap.get(AD_TAG_URI_KEY))); + } + } + else if (adSourceMap.get(CUSTOM_AD_DATA_KEY) != null) { + setCustomAdData(new CustomAdData(adSourceMap.get(CUSTOM_AD_DATA_KEY))); + } + else if (adSourceMap.get(VAST_AD_DATA_KEY) != null) { + setVastResponse(VastResponse.createInstance(adSourceMap.get(VAST_AD_DATA_KEY))); + } + } + + /** + * Checks if the ad tag URI is for a VAST response. + * + * @param adTagUriMap Map containing data for ad tag URI. + * @return True if the ad tag URI is for VAST, false otherwise. + */ + private boolean isAdTagUriVast(Map adTagUriMap) { + + Map attributes = adTagUriMap.get(XmlParser.ATTRIBUTES_TAG); + return !(attributes == null || attributes.get(VmapHelper.TEMPLATE_TYPE_KEY) == null) && + isVastTemplate(attributes.get(VmapHelper.TEMPLATE_TYPE_KEY)); + } + + /** + * Test whether or not the template is for an accepted VAST response. + * + * @param template The template to test. + * @return True if the template matches an accepted VAST response; false otherwise. + */ + private boolean isVastTemplate(String template) { + + return template.equals(VastResponse.VAST_3) || template.equals(VastResponse.VAST_2) + || template.equals(VastResponse.VAST_1) || template.equals(VastResponse.VAST); + } + + /** + * Get the ad source id. + * + * @return The ad source id. + */ + public String getId() { + + return mId; + } + + /** + * Set the add source id. + * + * @param id The ad source id. + */ + public void setId(String id) { + + mId = id; + } + + /** + * Get the allow multiple ads value. + * + * @return True if allowing multiple ads has been specified. + */ + public boolean isAllowMultipleAds() { + + return mAllowMultipleAds; + } + + /** + * Set the allow multiple ads value. + * + * @param allowMultipleAds The allow multiple ads value. + */ + public void setAllowMultipleAds(boolean allowMultipleAds) { + + mAllowMultipleAds = allowMultipleAds; + } + + /** + * Get the follow redirects value. + * + * @return True if the follow redirects value has been specified. + */ + public boolean isFollowRedirects() { + + return mFollowRedirects; + } + + /** + * Set the follow redirects value. + * + * @param followRedirects The follow redirects value. + */ + public void setFollowRedirects(boolean followRedirects) { + + mFollowRedirects = followRedirects; + } + + /** + * Get the VAST response that contains the ad response document. + * + * @return The VAST response. + */ + public VastResponse getVastResponse() { + + return mVastResponse; + } + + /** + * Set the VAST response. + * + * @param vastResponse The VAST response. + */ + public void setVastResponse(VastResponse vastResponse) { + + mVastResponse = vastResponse; + } + + /** + * Get the custom ad data. + * + * @return The custom ad data. + */ + public CustomAdData getCustomAdData() { + + return mCustomAdData; + } + + /** + * Set the custom ad data. + * + * @param customAdData The custom ad data. + */ + public void setCustomAdData(CustomAdData customAdData) { + + mCustomAdData = customAdData; + } + + /** + * Get the ad tag URI. + * + * @return The ad tag URI. + */ + public AdTagURI getAdTagURI() { + + return mAdTagURI; + } + + /** + * Set the ad tag URI. + * + * @param adTagURI The ad tag URI. + */ + public void setAdTagURI(AdTagURI adTagURI) { + + mAdTagURI = adTagURI; + } + + @Override + public String toString() { + + return "AdSource{" + + "mId='" + mId + '\'' + + ", mAllowMultipleAds=" + mAllowMultipleAds + + ", mFollowRedirects=" + mFollowRedirects + + ", mVastResponse=" + mVastResponse + + ", mCustomAdData=" + mCustomAdData + + ", mAdTagURI=" + mAdTagURI + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdTagURI.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdTagURI.java new file mode 100644 index 0000000..238b34a --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/AdTagURI.java @@ -0,0 +1,107 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vmap; + +import com.amazon.dynamicparser.impl.XmlParser; + +import android.util.Log; + +import java.util.Map; + +/** + * A URL to a secondary ad server that will provide the ad response document. + */ +public class AdTagURI { + + private static final String TAG = AdTagURI.class.getSimpleName(); + + /** + * The URL to a secondary ad server that will provide the ad response document. + */ + private String mUri; + + /** + * The ad response template employed by thee ad response document. + */ + private String mTemplateType; + + /** + * Constructor. + * + * @param map A map containing the data needed to create the ad tag URI. + */ + public AdTagURI(Map map) { + + if (map == null) { + Log.e(TAG, "Data map for constructing ad source cannot be null"); + throw new IllegalArgumentException("Data map parameter cannot be null"); + } + + Map attributeMap = (Map) map.get(XmlParser.ATTRIBUTES_TAG); + if (attributeMap != null) { + setTemplateType(attributeMap.get(VmapHelper.TEMPLATE_TYPE_KEY)); + } + setUri(VmapHelper.getTextValueFromMap(map)); + } + + /** + * Get the URI. + * + * @return The URI. + */ + public String getUri() { + + return mUri; + } + + /** + * Set the URI. + * + * @param uri The URI. + */ + public void setUri(String uri) { + + mUri = uri; + } + + /** + * Get the template type. + * + * @return The template type. + */ + public String getTemplateType() { + + return mTemplateType; + } + + /** + * Set the template type. + * + * @param templateType The template type. + */ + public void setTemplateType(String templateType) { + + mTemplateType = templateType; + } + + @Override + public String toString() { + + return "AdTagURI{" + + "mUri='" + mUri + '\'' + + ", mTemplateType='" + mTemplateType + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/CustomAdData.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/CustomAdData.java new file mode 100644 index 0000000..936f953 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/CustomAdData.java @@ -0,0 +1,108 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vmap; + +import com.amazon.dynamicparser.impl.XmlParser; + +import android.util.Log; + +import java.util.Map; + +/** + * An ad response document that is not VAST 3.0 + */ +public class CustomAdData { + + private static final String TAG = CustomAdData.class.getSimpleName(); + + /** + * Arbitrary string data that represents non-VAST ad response. + */ + private String mCustomAdResponse; + + /** + * The ad response template employed by the ad response document. + */ + private String mTemplateType; + + /** + * Constructor. + * + * @param map A map containing the data needed to create the custom data object. + */ + public CustomAdData(Map map) { + + if (map == null) { + Log.e(TAG, "Data map for constructing ad source cannot be null"); + throw new IllegalArgumentException("Data map parameter cannot be null"); + } + + Map attributeMap = (Map) map.get(XmlParser.ATTRIBUTES_TAG); + if (attributeMap != null) { + setTemplateType(attributeMap.get(VmapHelper.TEMPLATE_TYPE_KEY)); + } + + setCustomAdResponse(VmapHelper.getTextValueFromMap(map)); + } + + /** + * Get the custom ad response. + * + * @return The custom ad response. + */ + public String getCustomAdResponse() { + + return mCustomAdResponse; + } + + /** + * Set the custom ad response. + * + * @param customAdResponse The custom ad response. + */ + public void setCustomAdResponse(String customAdResponse) { + + mCustomAdResponse = customAdResponse; + } + + /** + * Get the template type. + * + * @return The template type. + */ + public String getTemplateType() { + + return mTemplateType; + } + + /** + * Set the template type. + * + * @param templateType The template type. + */ + public void setTemplateType(String templateType) { + + mTemplateType = templateType; + } + + @Override + public String toString() { + + return "CustomAdData{" + + "mCustomAdResponse='" + mCustomAdResponse + '\'' + + ", mTemplateType='" + mTemplateType + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/Extension.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/Extension.java new file mode 100644 index 0000000..470df7b --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/Extension.java @@ -0,0 +1,118 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vmap; + +import com.amazon.dynamicparser.impl.XmlParser; + +import android.util.Log; + +import java.util.Map; + +/** + * Part of the element. Proprietary XML data, expressed in a unique namespace. + */ +public class Extension { + + private static final String TAG = Extension.class.getSimpleName(); + + /** + * Key for getting the suppress bumper attribute. + */ + private static final String SUPPRESS_BUMPER_KEY = "suppress_bumper"; + + /** + * Key for getting the type attribute. + */ + private static final String TYPE_KEY = "type"; + + /** + * The XML content of the Extension. + */ + private boolean mSuppressBumper; + + /** + * The type of the extension. The type value must be globally unique. A URI is recommended + */ + private String mType; + + /** + * Constructor. + * + * @param extensionMap A map containing the data needed to create the extension. + */ + public Extension(Map extensionMap) { + + if (extensionMap == null) { + Log.e(TAG, "Data map for constructing ad source cannot be null"); + throw new IllegalArgumentException("Data map parameter cannot be null"); + } + + Map attributesMap = + (Map) extensionMap.get(XmlParser.ATTRIBUTES_TAG); + + setSuppressBumper(Boolean.valueOf(attributesMap.get(SUPPRESS_BUMPER_KEY))); + setType(attributesMap.get(TYPE_KEY)); + } + + /** + * Get the type of the extension. + * + * @return The extension type. + */ + public String getType() { + + return mType; + } + + /** + * Set the type of the extension. + * + * @param type The extension type. + */ + public void setType(String type) { + + mType = type; + } + + /** + * Get the XML content value. + * + * @return The XML content. + */ + public boolean isSuppressBumper() { + + return mSuppressBumper; + } + + /** + * Set the XML content suppressBumper. + * + * @param suppressBumper The XML content. + */ + + public void setSuppressBumper(boolean suppressBumper) { + + mSuppressBumper = suppressBumper; + } + + @Override + public String toString() { + + return "Extension{" + + "mSuppressBumper=" + mSuppressBumper + + ", mType='" + mType + '\'' + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/Tracking.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/Tracking.java new file mode 100644 index 0000000..b48534d --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/Tracking.java @@ -0,0 +1,239 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vmap; + +import com.amazon.dynamicparser.impl.XmlParser; + +import android.util.Log; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Part of the element. Provides a tracking URI that is used to provide tracking + * URIs for the three tracking events available in VMAP. + */ +public class Tracking { + + private static final String TAG = Tracking.class.getSimpleName(); + + /** + * This event indicates that an individual creative portion of the ad was viewed. + */ + public static final String CREATE_VIEW_TYPE = "createView"; + + /** + * This event is used to indicate that an individual creative within the ad was loaded and + * playback began. + */ + public static final String START_TYPE = "start"; + + /** + * The creative played for at least 50% of the total duration. + */ + public static final String MIDPOINT_TYPE = "midpoint"; + + /** + * The creative played for at least 25% of the total duration. + */ + public static final String FIRST_QUARTILE_TYPE = "firstQuartile"; + + /** + * The creative played for at least 75% of the total duration + */ + public static final String THIRD_QUARTILE_TYPE = "thirdQuartile"; + + /** + * The creative was played to the end at a normal speed. + */ + public static final String COMPLETE_TYPE = "complete"; + + /** + * The user activated the mute control and muted the creative. + */ + public static final String MUTE_TYPE = "mute"; + + /** + * The user activated the mute control and unmuted the creative. + */ + public static final String UNMUTE_TYPE = "unmute"; + + /** + * The user clicked teh pause control and stopped the creative. + */ + public static final String PAUSE_TYPE = "pause"; + + /** + * The user activated the rewind control to access a previous point in the creative timeline. + */ + public static final String REWIND_TYPE = "rewind"; + + /** + * The user activated a control to extend the video player to the edges of the viewer's screen. + */ + public static final String RESUME_TYPE = "resume"; + + /** + * The user activated the control to extend the video player to the edges of the viewer's + * screen. + */ + public static final String FULL_SCREEN_TYPE = "fullscreen"; + + /** + * The user activated the control to reduce video player size to original dimensions. + */ + public static final String EXIT_FULL_SCREEN_TYPE = "exitFullScreen"; + + /** + * The user activated a control to expand the creative. + */ + public static final String EXPAND_TYPE = "expand"; + + /** + * The user activated a control to reduce the creative to its original dimensions. + */ + public static final String COLLAPSE_TYPE = "collapse"; + + /** + * The user activated a control that launched an additional portion of the creative. + */ + public static final String ACCEPT_INVITATION_TYPE = "acceptInvitationLinear"; + + /** + * The user clicked the close button on the creative. + */ + public static final String CLOSE_TYPE = "closeLinear"; + + /** + * The user activated a skip control to skip the creative. + */ + public static final String SKIP_TYPE = "skip"; + + /** + * The creative played for a duration at normal speed that is equal or greater than the value + * provided in an additional attribute for offset. + */ + public static final String PROGRESS_TYPE = "progress"; + + /** + * Key to find the event attribute from the map. + */ + private static final String EVENT_KEY = "event"; + + /** + * URI to track for specific event type. + */ + private String mUri; + + /** + * The name of the VMAP ad break level event to track. + */ + private String mEvent; + + /** + * Constructor. + * + * @param map A data map that contains the URI data and an attributes map. + */ + public Tracking(Map map) { + + if (map == null) { + Log.e(TAG, "Data map for constructing ad source cannot be null"); + throw new IllegalArgumentException("Data map parameter cannot be null"); + } + + Map attributes = map.get(XmlParser.ATTRIBUTES_TAG); + if (attributes != null) { + setEvent(attributes.get(EVENT_KEY)); + } + + setUri(VmapHelper.getTextValueFromMap(map)); + } + + /** + * Get the URI. + * + * @return The URI. + */ + public String getUri() { + + return mUri; + } + + /** + * Set the URI. + * + * @param uri The URI. + */ + public void setUri(String uri) { + + mUri = uri; + } + + /** + * Get the event type. + * + * @return The event type. + */ + public String getEvent() { + + return mEvent; + } + + /** + * Set the event type. + * + * @param event The event type. + */ + public void setEvent(String event) { + + mEvent = event; + } + + /** + * Helper method that sorts tracking events into a map by event type. + * + * @param trackingEventMap The map to put the sorted tracking events into. + * @param trackingList The list of tracking events to sort. + * @return The sorted map. + */ + public static HashMap> addTrackingEventsToMap( + HashMap> trackingEventMap, List trackingList) { + + for (Tracking event : trackingList) { + if (trackingEventMap.containsKey(event.getEvent())) { + trackingEventMap.get(event.getEvent()).add(event.getUri()); + } + else { + List uris = new ArrayList<>(); + uris.add(event.getUri()); + trackingEventMap.put(event.getEvent(), uris); + } + } + return trackingEventMap; + } + + + @Override + public String toString() { + + return "Tracking{" + + "mUri='" + mUri + '\'' + + ", mEvent='" + mEvent + '\'' + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/VmapHelper.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/VmapHelper.java new file mode 100644 index 0000000..84757e2 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/VmapHelper.java @@ -0,0 +1,132 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vmap; + +import com.amazon.dynamicparser.impl.XmlParser; +import com.amazon.utils.ListUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * This class contains common keys to use while parsing a VMAP/VAST model. + */ +public class VmapHelper { + + /** + * Key to get the extensions element. + */ + public static final String EXTENSIONS_KEY = "vmap:Extensions"; + + /** + * Key to get the extension element. + */ + public static final String EXTENSION_KEY = "vmap:Extension"; + + /** + * Key to get the inline element. + */ + public static final String INLINE_KEY = "InLine"; + + /** + * Key to get the id attribute. + */ + public static final String ID_KEY = "id"; + + /** + * Key to get the template type attribute. + */ + public static final String TEMPLATE_TYPE_KEY = "templateType"; + + /** + * Key to get the error element. + */ + public static final String ERROR_ELEMENT_KEY = "Error"; + + /** + * Key to get the impression element. + */ + public static final String IMPRESSION_KEY = "Impression"; + + /** + * Key to get Tracking element. + */ + public static final String TRACKING_KEY = "Tracking"; + + /** + * Creates a list of extensions from the given data map. + * + * @param extensionsMap Data map containing the info needed to create the extensions. + * @return List of extensions. + */ + public static List createExtensions(Map extensionsMap) { + + List extensions = new ArrayList<>(); + + Object extensionObject = extensionsMap.get(VmapHelper.EXTENSION_KEY); + if (extensionObject instanceof List) { + + List extensionList = + ListUtils.getValueAsMapList(extensionsMap, VmapHelper.EXTENSION_KEY); + + for (Map extensionMap : extensionList) { + extensions.add(new Extension(extensionMap)); + } + } + else { + Map extensionMap = (Map) extensionObject; + if (extensionMap != null) { + extensions.add(new Extension(extensionMap)); + } + } + return extensions; + } + + /** + * Tries to get a text value from the map. It first tries to get the value using the cdata key. + * If no CDATA value is found, it returns the value from the map using the text key. + * + * @param map The map containing the text value. + * @return The text value returned by the cdata or text key. + */ + public static String getTextValueFromMap(Map map) { + + if (map.containsKey(XmlParser.CDATA_TAG)) { + return String.valueOf(map.get(XmlParser.CDATA_TAG)); + } + return String.valueOf(map.get(XmlParser.TEXT_TAG)); + } + + /** + * Tries to get a list of strings from the value that matches to the key within the map. + * + * @param map The map containing the strings. + * @param key The key. + * @return List of strings. + */ + public static List getStringListFromMap(Map map, String key) { + + List strings = new ArrayList<>(); + List impressionList = ListUtils.getValueAsMapList(map, key); + for (Map impressionMap : impressionList) { + String impression = VmapHelper.getTextValueFromMap(impressionMap); + if (impression != null) { + strings.add(impression); + } + } + return strings; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/VmapResponse.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/VmapResponse.java new file mode 100644 index 0000000..f96be8b --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/model/vmap/VmapResponse.java @@ -0,0 +1,224 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.model.vmap; + +import com.amazon.ads.IAds; +import com.amazon.android.ads.vast.model.vast.VastResponse; +import com.amazon.utils.ListUtils; + +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * This class represents a parsed VMAP response and follows selected parts of the VMAP 1.0 Schema as + * presented by IAB here: https://www.iab.com/wp-content/uploads/2015/06/VMAP.pdf + */ +public class VmapResponse { + + private static final String TAG = VmapResponse.class.getSimpleName(); + + /** + * Key to find the ad break element. + */ + private static final String AD_BREAK_KEY = "vmap:AdBreak"; + + /** + * List of ad breaks. + */ + private List mAdBreaks; + + /** + * The ad that the + */ + private AdBreak mCurrentAd; + + /** + * Constructor. + */ + public VmapResponse() { + + mAdBreaks = new ArrayList<>(); + } + + /** + * Creates an instance of the {@link VmapResponse} class with the given xml data. The xml should + * follow the official VMAP schema as described here: + * https://www.iab.com/wp-content/uploads/2015/06/VMAP.pdf + * + * @param xmlMap The xml data. + * @return A model object or null if there were instantiation errors. + */ + public static VmapResponse createInstance(Map xmlMap) { + + VmapResponse model = new VmapResponse(); + Log.d(TAG, "Creating VMAP model from xml data"); + + if (xmlMap != null) { + + // All VMAP models must have at least one ad break, return null if none are found. + if (xmlMap.get(AD_BREAK_KEY) == null) { + Log.e(TAG, "VMAP model xml contains no ad break element"); + return null; + } + List adBreakMapList = ListUtils.getValueAsMapList(xmlMap, AD_BREAK_KEY); + for (Map adBreakMap : adBreakMapList) { + model.getAdBreaks().add(new AdBreak(adBreakMap)); + } + } + model.setCurrentAd(model.getAdBreaks().get(0)); + + return model; + } + + /** + * Create a VMAP response with the given VAST response. It will set the VAST response ad as a + * linear pre-roll ad to be played at the start. + * + * @param vastResponse The VAST ad response. + * @return Teh VMAP response. + */ + public static VmapResponse createInstanceWithVast(VastResponse vastResponse) { + + VmapResponse vmapResponse = new VmapResponse(); + + // Create an Ad Break to store the pre-roll ad. + AdBreak adBreak = new AdBreak(); + adBreak.setBreakId(IAds.PRE_ROLL_AD); + adBreak.setTimeOffset(AdBreak.TIME_OFFSET_START); + adBreak.setBreakType(AdBreak.BREAK_TYPE_LINEAR); + + // Create an Ad Source to store the VAST ad. + AdSource adSource = new AdSource(); + adSource.setVastResponse(vastResponse); + + adBreak.setAdSource(adSource); + + vmapResponse.addAdBreak(adBreak); + + return vmapResponse; + } + + /** + * Get the ad breaks. + * + * @return The ad breaks. + */ + public List getAdBreaks() { + + return mAdBreaks; + } + + /** + * Set the ad breaks. + * + * @param adBreaks The ad breaks. + */ + public void setAdBreaks(List adBreaks) { + + mAdBreaks = adBreaks; + } + + /** + * Add an ad break. + * + * @param adBreak The ad break. + */ + public void addAdBreak(AdBreak adBreak) { + + if (mAdBreaks == null) { + mAdBreaks = new ArrayList<>(); + } + mAdBreaks.add(adBreak); + } + + /** + * Get all the ads with "preroll" in their ids. + * + * @return List of ads. + */ + public List getPreRollAdBreaks() { + + return getAdBreaksForType(IAds.PRE_ROLL_AD); + } + + /** + * Get all the ads with "midroll" in their ids. + * + * @return List of ads. + */ + public List getMidRollAdBreaks() { + + return getAdBreaksForType(IAds.MID_ROLL_AD); + } + + /** + * Get all the ads with "postroll" in their ids. + * + * @return List of ids. + */ + public List getPostRollAdBreaks() { + + return getAdBreaksForType(IAds.POST_ROLL_AD); + } + + /** + * Get a list of ad breaks for the given type of ad. + * + * @param type The type of ad: preroll, midroll, or postroll. + * @return List of ad breaks. + */ + private List getAdBreaksForType(String type) { + + List ads = new ArrayList<>(); + for (AdBreak ad : mAdBreaks) { + if (ad.getBreakId().contains(type)) { + ads.add(ad); + } + } + return ads; + } + + /** + * Get the current ad to play. + * + * @return The current ad. + */ + public AdBreak getCurrentAd() { + + return mCurrentAd; + } + + /** + * Set the current ad to play. + * + * @param currentAd The current ad. + */ + public void setCurrentAd(AdBreak currentAd) { + + mCurrentAd = currentAd; + } + + @Override + public String toString() { + + return "VmapResponse{" + + "mAdBreaks=" + mAdBreaks + + ", mCurrentAd=" + mCurrentAd + + '}'; + } +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/AdTagProcessor.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/AdTagProcessor.java new file mode 100644 index 0000000..231d628 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/AdTagProcessor.java @@ -0,0 +1,141 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.processor; + +import com.amazon.android.ads.vast.model.vast.VastResponse; +import com.amazon.android.ads.vast.model.vmap.VmapResponse; +import com.amazon.android.utils.NetworkUtils; +import com.amazon.dynamicparser.IParser; +import com.amazon.dynamicparser.impl.XmlParser; + +import android.util.Log; + +import java.io.IOException; +import java.util.Map; + +/** + * This class contains the logic to process a VMAP ad tag. It will read the data from the URL and + * attempt to parse it into the {@link VmapResponse} class. If the tag does not follow the proper + * VMAP schema, an error is returned. See the following for documentation: + * https://www.iab.com/wp-content/uploads/2015/06/VMAP.pdf + */ +public class AdTagProcessor { + + private static final String TAG = AdTagProcessor.class.getSimpleName(); + + /** + * Constant used to test for VMAP response. + */ + private static final String XMLNS_VMAP_KEY = "xmlns:vmap"; + + /** + * The type of the ad. Currently only VMAP, or errors. + */ + public enum AdTagType { + vmap, + vast, + error, + error_model_creation, + validation_error + } + + /** + * The VMAP response instance. + */ + private VmapResponse mVmapResponse; + + /** + * The media file picker. + */ + private MediaPicker mMediaPicker; + + /** + * Constructor. + * + * @param mediaPicker The media file picker. Used to validate the VMAP response after + * processing the ad tag URL. + */ + public AdTagProcessor(MediaPicker mediaPicker) { + + mMediaPicker = mediaPicker; + } + + /** + * Processes the data from a VMAP ad URL into a {@link VmapResponse} object. + * + * @param urlString The URL to process. + * @return The {@link AdTagType#vmap} value if a model was successfully created, otherwise an + * error value. + */ + public AdTagType process(String urlString) { + + Log.d(TAG, "Processing ad url string"); + String xmlData; + AdTagType type; + try { + xmlData = NetworkUtils.getDataLocatedAtUrl(urlString); + } + catch (IOException e) { + Log.e(TAG, "Could not get data from url " + urlString, e); + return AdTagType.error; + } + + XmlParser parser = new XmlParser(); + try { + Map xmlMap = (Map) parser.parse(xmlData); + + if (xmlMap != null) { + Map attributes = xmlMap.get(XmlParser.ATTRIBUTES_TAG); + + try { + if (attributes != null && attributes.containsKey(XMLNS_VMAP_KEY)) { + mVmapResponse = VmapResponse.createInstance(xmlMap); + type = AdTagType.vmap; + } + else { + Log.d(TAG, "Converting VAST response into VMAP response"); + VastResponse vastResponse = VastResponse.createInstance(xmlMap); + mVmapResponse = VmapResponse.createInstanceWithVast(vastResponse); + type = AdTagType.vast; + } + if (!ResponseValidator.validate(mVmapResponse, mMediaPicker)) { + return AdTagType.validation_error; + } + return type; + } + catch (IllegalArgumentException e) { + Log.e(TAG, "Caught IllegalArgumentException.", e); + return AdTagType.error_model_creation; + } + } + } + catch (IParser.InvalidDataException e) { + Log.e(TAG, "Data could not be parsed. ", e); + } + + return AdTagType.error; + } + + /** + * Get the ad response. + * + * @return The VMAP ad response. + */ + public VmapResponse getAdResponse() { + + return mVmapResponse; + } + +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTMediaPicker.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/MediaPicker.java similarity index 94% rename from VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTMediaPicker.java rename to VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/MediaPicker.java index e8d9d18..fc82a9f 100644 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTMediaPicker.java +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/MediaPicker.java @@ -44,13 +44,13 @@ */ package com.amazon.android.ads.vast.processor; -import com.amazon.android.ads.vast.model.VASTMediaFile; +import com.amazon.android.ads.vast.model.vast.MediaFile; import java.util.List; -public interface VASTMediaPicker { +public interface MediaPicker { - VASTMediaFile pickVideo(List list); + MediaFile pickVideo(List list); } diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/ResponseValidator.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/ResponseValidator.java new file mode 100644 index 0000000..1131144 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/ResponseValidator.java @@ -0,0 +1,140 @@ +/** + * This file was modified by Amazon: + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +/* + * Copyright (c) 2014, Nexage, Inc. All rights reserved. + * Copyright (C) 2016 Amazon Inc. + * + * Provided under BSD-3 license as follows: + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * 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. + * + * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.processor; + +import com.amazon.android.ads.vast.model.vast.MediaFile; +import com.amazon.android.ads.vast.model.vmap.AdBreak; +import com.amazon.android.ads.vast.model.vmap.VmapResponse; + +import android.text.TextUtils; +import android.util.Log; + +import java.util.List; + +/** + * Validates a VMAP response. + */ +public class ResponseValidator { + + private static final String TAG = ResponseValidator.class.getSimpleName(); + + /** + * Validate if the VMAP response with the given media picker. + * + * @param response The VMAP ad response. + * @param mediaPicker The media file picker. + * @return True if the response is valid, false otherwise. + */ + public static boolean validate(VmapResponse response, MediaPicker mediaPicker) { + + boolean isValid = false; + + Log.d(TAG, "validating ad response."); + + // We need at least one media file to play for the VMAP response to be valid. + for (AdBreak adBreak : response.getAdBreaks()) { + + // Must have a MediaPicker to choose one of the MediaFile element from XML + if (mediaPicker != null) { + MediaFile mediaFile = mediaPicker.pickVideo(adBreak.getMediaFiles()); + + if (mediaFile != null) { + String url = mediaFile.getValue(); + if (!TextUtils.isEmpty(url)) { + isValid = true; + // Set the best media file to use when playing the ad. + adBreak.setSelectedMediaFileUrl(url); + Log.d(TAG, "mediaPicker selected mediaFile with URL " + url); + } + } + } + else { + Log.e(TAG, "A MediaPicker is necessary to validate ad response."); + return false; + } + } + + Log.d(TAG, "Validator returns: " + (isValid ? "valid" : "not valid (no media file)")); + + return isValid; + } + + /** + * Validate the ad break. To be valid, the ad break must have at least one impression and at + * least one media file. + * + * @param adBreak The ad to validate. + * @return True if the ad break is valid, false otherwise. + */ + public static boolean validateAdBreak(AdBreak adBreak) { + + Log.d(TAG, "Validating ad break."); + + // Validate that there is an ad source + if (adBreak.getAdSource().getAdTagURI() == null && + adBreak.getAdSource().getCustomAdData() == null && + adBreak.getAdSource().getVastResponse() == null) { + Log.d(TAG, "Validator error: ad break needs a valid ad source"); + return false; + } + + // There should be at least one impression. + List impressions = adBreak.getImpressions(); + if (impressions == null || impressions.size() == 0) { + Log.d(TAG, "Validator error: impressions list invalid"); + return false; + } + + // There must be at least one media file. + List mediaFiles = adBreak.getMediaFiles(); + if (mediaFiles == null || mediaFiles.size() == 0) { + Log.d(TAG, "Validator error: mediaFile list invalid"); + return false; + } + + return true; + } + +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTModelPostValidator.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTModelPostValidator.java deleted file mode 100644 index 13e7471..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTModelPostValidator.java +++ /dev/null @@ -1,126 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.processor; - -import com.amazon.android.ads.vast.util.VASTLog; -import com.amazon.android.ads.vast.model.VASTMediaFile; -import com.amazon.android.ads.vast.model.VASTModel; - -import android.text.TextUtils; - -import java.util.List; - -public class VASTModelPostValidator { - - private static final String TAG = "VASTModelPostValidator"; - - - // This method tries to make sure that there is at least 1 Media file to - // be used for VASTActivity. Also, if the boolean validateModel is true, it will - // do additional validations which includes "at least 1 impression tracking url's is required' - // If any of the above fails, it returns false. The false indicates that you can stop proceeding - // further to display this on the MediaPlayer. - - public static boolean validate(VASTModel model, VASTMediaPicker mediaPicker) { - - VASTLog.d(TAG, "validate"); - - if (!validateModel(model)) { - VASTLog.d(TAG, "Validator returns: not valid (invalid model)"); - return false; - } - - boolean isValid = false; - - // Must have a MediaPicker to choose one of the MediaFile element from XML - if (mediaPicker != null) { - List mediaFiles = model.getMediaFiles(); - VASTMediaFile mediaFile = mediaPicker.pickVideo(mediaFiles); - - if (mediaFile != null) { - String url = mediaFile.getValue(); - if (!TextUtils.isEmpty(url)) { - isValid = true; - // Let's set this value inside VASTModel so that it can be - // accessed from VASTPlayer - model.setPickedMediaFileURL(url); - VASTLog.d(TAG, - "mediaPicker selected mediaFile with URL " + url); - } - } - - } - else { - VASTLog.w(TAG, "mediaPicker: We don't have a compatible media file to play."); - } - - VASTLog.d(TAG, "Validator returns: " + (isValid ? "valid" : "not valid (no media file)")); - - return isValid; - } - - - private static boolean validateModel(VASTModel model) { - - VASTLog.d(TAG, "validateModel"); - boolean isValid = true; - - // There should be at least one impression. - List impressions = model.getImpressions(); - if (impressions == null || impressions.size() == 0) { - isValid = false; - } - - // There must be at least one VASTMediaFile object - List mediaFiles = model.getMediaFiles(); - if (mediaFiles == null || mediaFiles.size() == 0) { - VASTLog.d(TAG, "Validator error: mediaFile list invalid"); - isValid = false; - } - - return isValid; - } - -} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTProcessor.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTProcessor.java deleted file mode 100644 index b9c91d4..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/VASTProcessor.java +++ /dev/null @@ -1,256 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.processor; - -import com.amazon.android.ads.vast.VASTAdsPlayer; -import com.amazon.android.ads.vast.model.VASTModel; -import com.amazon.android.ads.vast.model.VAST_DOC_ELEMENTS; -import com.amazon.android.ads.vast.util.VASTLog; -import com.amazon.android.ads.vast.util.XmlTools; -import com.amazon.android.ads.vast.util.XmlValidation; - -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.net.URL; -import java.nio.charset.Charset; - -import javax.xml.parsers.DocumentBuilderFactory; - -/** - * This class is responsible for taking a VAST 2.0 XML file, parsing it, - * validating it, and creating a valid VASTModel object corresponding to it. - * - * It can handle "regular" VAST XML files as well as VAST wrapper files. - */ -public final class VASTProcessor { - - private static final String TAG = "VASTProcessor"; - - // Maximum number of VAST files that can be read (wrapper file(s) + actual - // target file) - private static final int MAX_VAST_LEVELS = 5; - private static final boolean IS_VALIDATION_ON = false; - - private VASTMediaPicker mediaPicker; - private VASTModel vastModel; - private StringBuilder mergedVastDocs = new StringBuilder(500); - - public VASTProcessor(VASTMediaPicker mediaPicker) { - - this.mediaPicker = mediaPicker; - } - - public VASTModel getModel() { - - return vastModel; - } - - public int process(String xmlData) { - - VASTLog.d(TAG, "process"); - vastModel = null; - InputStream is; - - - try { - is = new ByteArrayInputStream(xmlData.getBytes(Charset - .defaultCharset().name())); - } - catch (UnsupportedEncodingException e) { - VASTLog.e(TAG, e.getMessage(), e); - return VASTAdsPlayer.ERROR_XML_PARSE; - } - - int error = processUri(is, 0); - try { - is.close(); - } - catch (IOException e) { - VASTLog.e(TAG, "Failed to close input stream", e); - } - if (error != VASTAdsPlayer.ERROR_NONE) { - return error; - } - - Document mainDoc = wrapMergedVastDocWithVasts(); - vastModel = new VASTModel(mainDoc); - - if (mainDoc == null) { - return VASTAdsPlayer.ERROR_XML_PARSE; - } - - - if (!VASTModelPostValidator.validate(vastModel, mediaPicker)) { - return VASTAdsPlayer.ERROR_POST_VALIDATION; - } - - return VASTAdsPlayer.ERROR_NONE; - } - - private Document wrapMergedVastDocWithVasts() { - - VASTLog.d(TAG, "wrapmergedVastDocWithVasts"); - mergedVastDocs.insert(0, ""); - mergedVastDocs.append(""); - - String merged = mergedVastDocs.toString(); - VASTLog.v(TAG, "Merged VAST doc:\n" + merged); - - return XmlTools.stringToDocument(merged); - } - - private int processUri(InputStream is, int depth) { - - VASTLog.d(TAG, "processUri"); - - if (depth >= MAX_VAST_LEVELS) { - String message = "VAST wrapping exceeded max limit of " - + MAX_VAST_LEVELS + "."; - VASTLog.e(TAG, message); - return VASTAdsPlayer.ERROR_EXCEEDED_WRAPPER_LIMIT; - } - - Document doc = createDoc(is); - if (doc == null) { - return VASTAdsPlayer.ERROR_XML_PARSE; - } - - if (IS_VALIDATION_ON) { - if (!validateAgainstSchema(doc)) { - return VASTAdsPlayer.ERROR_SCHEMA_VALIDATION; - } - } - - merge(doc); - - // check to see if this is a VAST wrapper ad - NodeList uriToNextDoc = doc - .getElementsByTagName(VAST_DOC_ELEMENTS.vastAdTagURI.getValue()); - if (uriToNextDoc == null || uriToNextDoc.getLength() == 0) { - // This isn't a wrapper ad, so we're done. - return VASTAdsPlayer.ERROR_NONE; - } - else { - // This is a wrapper ad, so move on to the wrapped ad and process - // it. - VASTLog.d(TAG, "Doc is a wrapper. "); - Node node = uriToNextDoc.item(0); - String nextUri = XmlTools.getElementValue(node); - VASTLog.d(TAG, "Wrapper URL: " + nextUri); - InputStream nextInputStream; - try { - URL nextUrl = new URL(nextUri); - nextInputStream = nextUrl.openStream(); - } - catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - return VASTAdsPlayer.ERROR_XML_OPEN_OR_READ; - } - int error = processUri(nextInputStream, depth + 1); - try { - nextInputStream.close(); - } - catch (IOException e) { - VASTLog.e(TAG, "Failed to close input stream", e); - } - return error; - } - } - - - private Document createDoc(InputStream is) { - - VASTLog.d(TAG, "About to create doc from InputStream"); - try { - Document doc = DocumentBuilderFactory.newInstance() - .newDocumentBuilder().parse(is); - doc.getDocumentElement().normalize(); - VASTLog.d(TAG, "Doc successfully created."); - return doc; - } - catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - return null; - } - } - - private void merge(Document newDoc) { - - VASTLog.d(TAG, "About to merge doc into main doc."); - - NodeList nl = newDoc.getElementsByTagName("VAST"); - - Node newDocElement = nl.item(0); - - String doc = XmlTools.xmlDocumentToString(newDocElement); - mergedVastDocs.append(doc); - - VASTLog.d(TAG, "Merge successful."); - } - - // Validator using mfXerces..... - private boolean validateAgainstSchema(Document doc) { - - VASTLog.d(TAG, "About to validate doc against schema."); - InputStream stream = VASTProcessor.class - .getResourceAsStream("assets/vast_2_0_1_schema.xsd"); - String xml = XmlTools.xmlDocumentToString(doc); - boolean isValid = XmlValidation.validate(stream, xml); - try { - stream.close(); - } - catch (IOException e) { - VASTLog.e(TAG, "Failed to close input stream", e); - } - return isValid; - } - -} \ No newline at end of file diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vast3_draft.xsd b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vast3_draft.xsd new file mode 100644 index 0000000..430743c --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vast3_draft.xsd @@ -0,0 +1,1036 @@ + + + + + IAB VAST, Video Ad Serving Template, video xml ad response, Version 3.0.0, xml schema prepared by Google + + + + + + Top-level element, wraps each ad in the response + + + + + + Second-level element surrounding complete ad data for a single ad + + + + + + Indicates source ad server + + + + + Common name of ad + + + + + Longer description of ad + + + + + Common name of advertiser + + + + + The price of the ad. + + + + + + + The pricing model used. + + + + + + + + + + + + + The currency of the pricing. + + + + + + + + + + + + + + URL of request to survey vendor + + + + + URL to request if ad does not play due to error + + + + + + Contains all creative elements within an InLine or Wrapper Ad + + + + + + Wraps each creative element within an InLine or Wrapper Ad + + + + + + + + + + + + Any number of icons representing advertising industry initiatives. + + + + + + + + + Duration in standard time format, hh:mm:ss + + + + + + Data to be passed into the video ad + + + + + + + + + Location of linear file + + + + + + + Optional identifier + + + + + Method of delivery of ad + + + + + + + + + + + MIME type. Popular MIME types include, but are not limited to “video/x-ms-wmv” for Windows Media, and “video/x-flv” for Flash Video. Image ads or interactive ads can be included in the MediaFiles section with appropriate Mime + types + + + + + Bitrate of encoded video in Kbps. If bitrate is supplied, minBitrate and maxBitrate should not be supplied. + + + + + Minimum bitrate of an adaptive stream in Kbps. If minBitrate is supplied, maxBitrate must be supplied and bitrate should not be supplied. + + + + + Maximum bitrate of an adaptive stream in Kbps. If maxBitrate is supplied, minBitrate must be supplied and bitrate should not be supplied. + + + + + Pixel dimensions of video + + + + + Pixel dimensions of video + + + + + Whether it is acceptable to scale the image. + + + + + Whether the ad must have its aspect ratio maintained when scales + + + + + The apiFramework defines the method to use for communication if the MediaFile is interactive. Suggested values for this element are “VPAID”, “FlashVars” (for Flash/Flex), “initParams” (for Silverlight) and “GetVariables” + (variables placed in key/value pairs on the asset request). + + + + + The codec used to produce the media file. + + + + + + + + + + + + + The time at which the ad becomes skippable, if absent, the ad is not skippable. + + + + + + + + + + + + + + + Any number of companions in any desired pixel dimensions. + + + + + + Provides information about which companion creative to display. All means that the player must attempt to display all. Any means the player must attempt to play at least one. None means all companions are optional. + + + + + + + + + + + + + + + + + + Any number of companions in any desired pixel dimensions. + + + + + + + + + + The preferred order in which multiple Creatives should be displayed + + + + + Ad-ID for the creative (formerly ISCI) + + + + + + + + + + + + + + Second-level element surrounding wrapper ad pointing to Secondary ad server. + + + + + + Indicates source ad server + + + + + URL of ad tag of downstream Secondary Ad Server + + + + + URL to request if ad does not play due to error + + + + + URL to request to track an impression + + + + + + + + + + + + + + + + + + Any number of icons representing advertising industry initiatives. + + + + + + + + + + + + URL to request for tracking purposes when user clicks on the video + + + + + + + + + + + + URLs to request on custom events such as hotspotted video + + + + + + + + + + + + + + + + + + + + + Definition of Companion ad, if served separately + + + + + + + + + + + + Any number of companions in any desired pixel dimensions. + + + + + + + + + + The preferred order in which multiple Creatives should be displayed + + + + + Ad-ID for the creative (formerly ISCI) + + + + + + + + + + + + + + + + Identifies the sequence of multiple Ads and defines an Ad Pod. + + + + + + + + Current version is 3.0. + + + + + + + + + The name of the event to track for the element. The creativeView should always be requested when present. + + + + + + + The name of the event to track. For nonlinear ads these events should be recorded on the video within the ad. + + + + + + + + + + + + + + + + + + + + + + + + + + + + The time during the video at which this url should be pinged. Must be present for progress event. + + + + + + + + + + + + + + + + + + URL to open as destination page when user clicks on the video + + + + + + + + + + + + URL to request for tracking purposes when user clicks on the video + + + + + + + + + + + + URLs to request on custom events such as hotspotted video + + + + + + + + + + + + + + + + + URL to a static file, such as an image or SWF file + + + + + + + Mime type of static resource + + + + + + + + + URL source for an IFrame to display the companion element + + + + + HTML to display the companion element + + + + + + + The creativeView should always be requested when present. For Companions creativeView is the only supported event. + + + + + URL to open as destination page when user clicks on the the companion banner ad. + + + + + Alt text to be displayed when companion is rendered in HTML environment. + + + + + Data to be passed into the companion ads. The apiFramework defines the method to use for communication (e.g. “FlashVar”) + + + + + + Optional identifier + + + + + Pixel dimensions of companion slot + + + + + Pixel dimensions of companion slot + + + + + Pixel dimensions of the companion asset + + + + + Pixel dimensions of the companion asset + + + + + Pixel dimensions of expanding companion ad when in expanded state + + + + + Pixel dimensions of expanding companion ad when in expanded state + + + + + The apiFramework defines the method to use for communication with the companion + + + + + Used to match companion creative to publisher placement areas on the page. + + + + + + + + + URL to a static file, such as an image or SWF file + + + + + + + Mime type of static resource + + + + + + + + + URL source for an IFrame to display the companion element + + + + + HTML to display the companion element + + + + + + + The creativeView should always be requested when present. For Companions creativeView is the only supported event. + + + + + URL to open as destination page when user clicks on the the companion banner ad. + + + + + URLs to ping when user clicks on the the companion banner ad. + + + + + Alt text to be displayed when companion is rendered in HTML environment. + + + + + Data to be passed into the companion ads. The apiFramework defines the method to use for communication (e.g. “FlashVar”) + + + + + + Optional identifier + + + + + Pixel dimensions of companion slot + + + + + Pixel dimensions of companion slot + + + + + Pixel dimensions of the companion asset + + + + + Pixel dimensions of the companion asset + + + + + Pixel dimensions of expanding companion ad when in expanded state + + + + + Pixel dimensions of expanding companion ad when in expanded state + + + + + The apiFramework defines the method to use for communication with the companion + + + + + Used to match companion creative to publisher placement areas on the page. + + + + + + + + + URL to a static file, such as an image or SWF file + + + + + + + Mime type of static resource + + + + + + + + + URL source for an IFrame to display the companion element + + + + + HTML to display the companion element + + + + + + + URLs to ping when user clicks on the the non-linear ad. + + + + + URL to open as destination page when user clicks on the non-linear ad unit. + + + + + Data to be passed into the video ad. + + + + + + Optional identifier + + + + + Pixel dimensions of companion + + + + + Pixel dimensions of companion + + + + + Pixel dimensions of expanding nonlinear ad when in expanded state + + + + + Pixel dimensions of expanding nonlinear ad when in expanded state + + + + + Whether it is acceptable to scale the image. + + + + + Whether the ad must have its aspect ratio maintained when scales + + + + + Suggested duration to display non-linear ad, typically for animation to complete. Expressed in standard time format hh:mm:ss + + + + + The apiFramework defines the method to use for communication with the nonlinear element + + + + + + + + + URLs to ping when user clicks on the the non-linear ad unit. + + + + + + Optional identifier + + + + + Pixel dimensions of companion + + + + + Pixel dimensions of companion + + + + + Pixel dimensions of expanding nonlinear ad when in expanded state + + + + + Pixel dimensions of expanding nonlinear ad when in expanded state + + + + + Whether it is acceptable to scale the image. + + + + + Whether the ad must have its aspect ratio maintained when scales + + + + + Suggested duration to display non-linear ad, typically for animation to complete. Expressed in standard time format hh:mm:ss + + + + + The apiFramework defines the method to use for communication with the nonlinear element + + + + + + + + + Internal version used by ad system + + + + + + + + + + + + + + + + + + URL to a static file, such as an image or SWF file + + + + + + + Mime type of static resource + + + + + + + + + URL source for an IFrame to display the companion element + + + + + HTML to display the companion element + + + + + + + + + URLs to ping when user clicks on the the icon. + + + + + URL to open as destination page when user clicks on the icon. + + + + + + + + URLs to ping when icon is shown. + + + + + + Identifies the industry initiative that the icon supports. + + + + + Pixel dimensions of icon. + + + + + Pixel dimensions of icon. + + + + + The horizontal alignment location (in pixels) or a specific alignment. + + + + + + + + + + The vertical alignment location (in pixels) or a specific alignment. + + + + + + + + + + Start time at which the player should display the icon. Expressed in standard time format hh:mm:ss. + + + + + The duration for which the player must display the icon. Expressed in standard time format hh:mm:ss. + + + + + The apiFramework defines the method to use for communication with the icon element + + + + + + + + Any valid XML may be included in the Extensions node + + + + + + + + + + + + + + + Any valid XML may be included in the Extensions node + + + + + + + + + + + + + + + + Specifies whether the parameters are XML-encoded + + + + + + + + + + + Specifies whether the HTML is XML-encoded + + + + + + \ No newline at end of file diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vast_2_0_1_schema.xsd b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vast_2_0_1_schema.xsd index 0f73731..6407b80 100644 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vast_2_0_1_schema.xsd +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vast_2_0_1_schema.xsd @@ -1,643 +1,990 @@ - - - IAB VAST, Video Ad Serving Template, video xml ad response, Version 2.0.1, xml schema prepared by Tremor Media - - - - - - Top-level element, wraps each ad in the response - - - - - - Second-level element surrounding complete ad data for a single ad - - - - - - Indicates source ad server - - - - - Common name of ad - - - - - Longer description of ad - - - - - URL of request to survey vendor - - - - - URL to request if ad does not play due to error - - - - - URL to track impression - - - - - Any number of companions in any desired pixel dimensions. - - - - - - Wraps each creative element within an InLine or Wrapper Ad - - - - - - - - - Duration in standard time format, hh:mm:ss - - - - - - Data to be passed into the video ad - - - - - - - - - Location of linear file - - - - - - - Optional identifier - - - - - Method of delivery of ad - - - - - - - - - - - MIME type. Popular MIME types include, but are not limited to “video/x-ms-wmv” for Windows Media, and “video/x-flv” for Flash Video. Image ads or interactive ads can be included in the MediaFiles section with appropriate Mime types - - - - - Bitrate of encoded video in Kbps - - - - - Pixel dimensions of video - - - - - Pixel dimensions of video - - - - - Whether it is acceptable to scale the image. - - - - - Whether the ad must have its aspect ratio maintained when scales - - - - - The apiFramework defines the method to use for communication if the MediaFile is interactive. Suggested values for this element are “VPAID”, “FlashVars” (for Flash/Flex), “initParams” (for Silverlight) and “GetVariables” (variables placed in key/value pairs on the asset request). - - - - - - - - - - - - - - - - - - Any number of companions in any desired pixel dimensions. - - - - - - - - - - - - Any number of companions in any desired pixel dimensions. - - - - - - - - - - The preferred order in which multiple Creatives should be displayed - - - - - Ad-ID for the creative (formerly ISCI) - - - - - - - - - - - - - Any valid XML may be included in the Extensions node - - - - - - - - - - - Second-level element surrounding wrapper ad pointing to Secondary ad server. - - - - - - Indicates source ad server - - - - - URL of ad tag of downstream Secondary Ad Server - - - - - URL to request if ad does not play due to error - - - - - URL to request to track an impression - - - - - - - - - - - - - - - - - - URL to request for tracking purposes when user clicks on the video - - - - - - - - - - - - - - - - - - - - - Definition of Companion ad, if served separately - - - - - - - - - - - - Any number of companions in any desired pixel dimensions. - - - - - - - - - - The preferred order in which multiple Creatives should be displayed - - - - - Ad-ID for the creative (formerly ISCI) - - - - - - - - - - - - - Any valid XML may be included in the Extensions node - - - - - - - - - - - - - - - - Current version is 2.0. The 2.0.1 version corrects an error in the Wrapper section related the Linear node's TrackingEvents and VideoCLicks elements. - - - - - - - - - The name of the event to track for the Linear element. The creativeView should always be requested when present. - - - - - - - The name of the event to track. For nonlinear ads these events should be recorded on the video within the ad. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - URL to open as destination page when user clicks on the video - - - - - - - - - - - - URL to request for tracking purposes when user clicks on the video - - - - - - - - - - - - URLs to request on custom events such as hotspotted video - - - - - - - - - - - - - - - - - URL to a static file, such as an image or SWF file - - - - - - - Mime type of static resource - - - - - - - - - URL source for an IFrame to display the companion element - - - - - HTML to display the companion element - - - - - - The creativeView should always be requested when present. For Companions creativeView is the only supported event. - - - - - URL to open as destination page when user clicks on the the companion banner ad. - - - - - Alt text to be displayed when companion is rendered in HTML environment. - - - - - Data to be passed into the companion ads. The apiFramework defines the method to use for communication (e.g. “FlashVar”) - - - - - - Optional identifier - - - - - Pixel dimensions of companion - - - - - Pixel dimensions of companion - - - - - Pixel dimensions of expanding companion ad when in expanded state - - - - - Pixel dimensions of expanding companion ad when in expanded state - - - - - The apiFramework defines the method to use for communication with the companion - - - - - - - - - URL to a static file, such as an image or SWF file - - - - - - - Mime type of static resource - - - - - - - - - URL source for an IFrame to display the companion element - - - - - HTML to display the companion element - - - - - - URL to open as destination page when user clicks on the the non-linear ad unit. - - - - - Data to be passed into the video ad. - - - - - - Optional identifier - - - - - Pixel dimensions of companion - - - - - Pixel dimensions of companion - - - - - Pixel dimensions of expanding nonlinear ad when in expanded state - - - - - Pixel dimensions of expanding nonlinear ad when in expanded state - - - - - Whether it is acceptable to scale the image. - - - - - Whether the ad must have its aspect ratio maintained when scales - - - - - Suggested duration to display non-linear ad, typically for animation to complete. Expressed in standard time format hh:mm:ss - - - - - The apiFramework defines the method to use for communication with the nonlinear element - - - - - - - - - Internal version used by ad system - - - - - - - - - - - - - + attributeFormDefault="unqualified"> + + + IAB VAST, Video Ad Serving Template, video xml ad response, Version + 2.0.1, xml schema prepared by Tremor Media + + + + + + + Top-level element, wraps each ad in the response + + + + + + + Second-level element surrounding complete ad + data for a single ad + + + + + + + Indicates source ad server + + + + + + Common name of ad + + + + + + Longer description of ad + + + + + + URL of request to survey vendor + + + + + + URL to request if ad does not play + due to error + + + + + + URL to track impression + + + + + + Any number of companions in any + desired pixel dimensions. + + + + + + + Wraps each creative + element within an InLine or Wrapper + Ad + + + + + + + + + + + Duration in + standard + time format, + hh:mm:ss + + + + + + + + Data to be + passed into + the video ad + + + + + + + + + + + Location + of + linear + file + + + + + + + + + Optional + identifier + + + + + + + Method + of + delivery + of + ad + + + + + + + + + + + + + MIME + type. + Popular + MIME + types + include, + but + are + not + limited + to + “video/x-ms-wmv” + for + Windows + Media, + and + “video/x-flv” + for + Flash + Video. + Image + ads + or + interactive + ads + can + be + included + in + the + MediaFiles + section + with + appropriate + Mime + types + + + + + + + Bitrate + of + encoded + video + in + Kbps + + + + + + + Pixel + dimensions + of + video + + + + + + + Pixel + dimensions + of + video + + + + + + + Whether + it + is + acceptable + to + scale + the + image. + + + + + + + Whether + the + ad + must + have + its + aspect + ratio + maintained + when + scales + + + + + + + The + apiFramework + defines + the + method + to + use + for + communication + if + the + MediaFile + is + interactive. + Suggested + values + for + this + element + are + “VPAID”, + “FlashVars” + (for + Flash/Flex), + “initParams” + (for + Silverlight) + and + “GetVariables” + (variables + placed + in + key/value + pairs + on + the + asset + request). + + + + + + + + + + + + + + + + + + + + Any number + of + companions + in any + desired + pixel + dimensions. + + + + + + + + + + + + + + Any number + of + companions + in any + desired + pixel + dimensions. + + + + + + + + + + + The preferred + order in which multiple + Creatives should be + displayed + + + + + + Ad-ID for the + creative (formerly ISCI) + + + + + + + + + + + + + + Any valid XML may be + included in the Extensions node + + + + + + + + + + + + Second-level element surrounding wrapper ad + pointing to Secondary ad server. + + + + + + + Indicates source ad server + + + + + + URL of ad tag of downstream + Secondary Ad Server + + + + + + URL to request if ad does not play + due to error + + + + + + URL to request to track an + impression + + + + + + + + + + + + + + + + + + + + URL + to + request + for + tracking + purposes + when + user + clicks + on + the + video + + + + + + + + + + + + + + + + + + + + + + + Definition + of Companion + ad, if + served + separately + + + + + + + + + + + + + + Any number + of + companions + in any + desired + pixel + dimensions. + + + + + + + + + + + The preferred + order in which multiple + Creatives should be + displayed + + + + + + Ad-ID for the + creative (formerly ISCI) + + + + + + + + + + + + + + Any valid XML may be + included in the Extensions node + + + + + + + + + + + + + + + + + Current version is 2.0. The 2.0.1 version corrects an error in + the Wrapper section related the Linear node's TrackingEvents and VideoCLicks + elements. + + + + + + + + + + The name of the event to track for the Linear element. The + creativeView should always be requested when present. + + + + + + + + The name of the event to track. For nonlinear + ads these events should be recorded on the video within the + ad. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + URL to open as destination page when user clicks on the + video + + + + + + + + + + + + + URL to request for tracking purposes when user clicks on the + video + + + + + + + + + + + + + URLs to request on custom events such as hotspotted video + + + + + + + + + + + + + + + + + + URL to a static file, such as an image or SWF file + + + + + + + + Mime type of static resource + + + + + + + + + + URL source for an IFrame to display the companion + element + + + + + + HTML to display the companion element + + + + + + The creativeView should always be requested when present. For + Companions creativeView is the only supported event. + + + + + + URL to open as destination page when user clicks on the the + companion banner ad. + + + + + + Alt text to be displayed when companion is rendered in HTML + environment. + + + + + + Data to be passed into the companion ads. The apiFramework + defines the method to use for communication (e.g. “FlashVar”) + + + + + + + Optional identifier + + + + + Pixel dimensions of companion + + + + + Pixel dimensions of companion + + + + + Pixel dimensions of expanding companion ad when in expanded + state + + + + + + Pixel dimensions of expanding companion ad when in expanded + state + + + + + + The apiFramework defines the method to use for communication with + the companion + + + + + + + + + + URL to a static file, such as an image or SWF file + + + + + + + + Mime type of static resource + + + + + + + + + + URL source for an IFrame to display the companion + element + + + + + + HTML to display the companion element + + + + + + URL to open as destination page when user clicks on the the + non-linear ad unit. + + + + + + Data to be passed into the video ad. + + + + + + Optional identifier + + + + + Pixel dimensions of companion + + + + + Pixel dimensions of companion + + + + + Pixel dimensions of expanding nonlinear ad when in expanded + state + + + + + + Pixel dimensions of expanding nonlinear ad when in expanded + state + + + + + + Whether it is acceptable to scale the image. + + + + + Whether the ad must have its aspect ratio maintained when scales + + + + + + Suggested duration to display non-linear ad, typically for + animation to complete. Expressed in standard time format hh:mm:ss + + + + + + The apiFramework defines the method to use for communication with + the nonlinear element + + + + + + + + + + Internal version used by ad system + + + + + + + + + + + + + \ No newline at end of file diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vmap_schema.xsd b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vmap_schema.xsd new file mode 100644 index 0000000..d163144 --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/processor/assets/vmap_schema.xsd @@ -0,0 +1,184 @@ + + + + + + IAB VMAP, Video Multiple AD Playlist, Version 1.0, xml schema prepared by FreeWheel + + + + + + Top-level element, represents a single ad break, but may allow for multiple ads + + + + + + Represents the ad data that will be used to fill the ad break + + + + + + A VAST 3.0 document that comprises the ad response document. Not contained within a CDATA. (There were are a couple of places where the VMAP 1.0 pdf incorrectly references both VASTData and VASTAdData but VASTAdData is the correct element per VMAP 1.0.1) + + + + + An ad response document (included inline) that is not VAST 3.0 + + + + + URL to a secondary ad server that will provide the ad response. URL must be contained within a CDATA block + + + + + + Identifier for the ad source + + + + + Indicates whether the player should select and play only a single ad from the ad response document, or play multiple ads. If not specified, video player accepts playing multiple ads in an ad break + + + + + Whether the player should follow wrappers/redirects in the ad response document. If not specified, left to the video player’s discretion + + + + + + + Container for tracking URIs for events specific to VMAP + + + + + Container for Extensions that express additional information not supported by VMAP + + + + + + Represent the timing for the ad break. Expressed in one of four ways: (1)time format HH:MM:SS[.mmm], (2)n% (n is an integer from 0-100 and represents percentage of total duration from start to that point), (3)“start” or “end”, or (4) #m (m is an integer > 0 and represents the position of the ad break opportunity) + + + + + The type of ads allowed by the ad break: "linear", "nonlinear" or "display" (multiple types can be entered using a comma separator with no spaces). Intended to provide a "hint" to the player + + + + + Optional identifier for the ad break + + + + + Optional indicator that instructs the video player to repeat the same AdBreak and AdSource at time offsets equal to the duration value of this attribute. Expresssed in time format HH.MM.SS[.mmm] + + + + + + + + Current version is 1.0.1 + + + + + + + + + URI to track for specified event type + + + + + + + The name of the VMAP ad break level event to track + + + + + + + + + + + + + + + + + + + + The XML content of the Extension. Extension XML must use its own namespace + + + + + + + + The type of the extension. The type value must be globally unique. A URI is recommended + + + + + + + + + + + + + + + + + The ad response template employed by the ad response document + + + + + + + + + + + + + + + + + + The ad response template employed by the ad response document + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/DefaultMediaPicker.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/DefaultMediaPicker.java index 01320aa..04a0530 100644 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/DefaultMediaPicker.java +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/DefaultMediaPicker.java @@ -44,12 +44,13 @@ */ package com.amazon.android.ads.vast.util; -import com.amazon.android.ads.vast.model.VASTMediaFile; -import com.amazon.android.ads.vast.processor.VASTMediaPicker; +import com.amazon.android.ads.vast.model.vast.MediaFile; +import com.amazon.android.ads.vast.processor.MediaPicker; import android.content.Context; import android.text.TextUtils; import android.util.DisplayMetrics; +import android.util.Log; import java.math.BigInteger; import java.util.Collections; @@ -57,7 +58,7 @@ import java.util.Iterator; import java.util.List; -public class DefaultMediaPicker implements VASTMediaPicker { +public class DefaultMediaPicker implements MediaPicker { private static final String TAG = "DefaultMediaPicker"; private static final int maxPixels = 5000; @@ -85,7 +86,7 @@ public DefaultMediaPicker(int width, int height) { @Override // given a list of MediaFiles, select the most appropriate one. - public VASTMediaFile pickVideo(List mediaFiles) { + public MediaFile pickVideo(List mediaFiles) { //make sure that the list of media files contains the correct attributes if (mediaFiles == null || prefilterMediaFiles(mediaFiles) == 0) { return null; @@ -94,30 +95,29 @@ public VASTMediaFile pickVideo(List mediaFiles) { return getBestMatch(mediaFiles); } - /* + /* * This method filters the list of mediafiles and return the count. - * Validate that the media file objects contain the required attributes for the Default Media - * Picker processing. - * - * Required attributes: - * 1. type - * 2. height - * 3. width - * 4. url - */ - - private int prefilterMediaFiles(List mediaFiles) { - - Iterator iter = mediaFiles.iterator(); + * Validate that the media file objects contain the required attributes for the Default Media + * Picker processing. + * + * Required attributes: + * 1. type + * 2. height + * 3. width + * 4. url + */ + private int prefilterMediaFiles(List mediaFiles) { + + Iterator iter = mediaFiles.iterator(); while (iter.hasNext()) { - VASTMediaFile mediaFile = iter.next(); + MediaFile mediaFile = iter.next(); // type attribute String type = mediaFile.getType(); if (TextUtils.isEmpty(type)) { - VASTLog.d(TAG, "Validator error: mediaFile type empty"); + Log.d(TAG, "Validator error: mediaFile type empty"); iter.remove(); continue; } @@ -126,16 +126,13 @@ private int prefilterMediaFiles(List mediaFiles) { BigInteger height = mediaFile.getHeight(); if (null == height) { - VASTLog - .d(TAG, "Validator error: mediaFile height null"); + Log.d(TAG, "Validator error: mediaFile height null"); iter.remove(); continue; } int videoHeight = height.intValue(); if (!(0 < videoHeight && videoHeight < maxPixels)) { - VASTLog.d(TAG, - "Validator error: mediaFile height invalid: " - + videoHeight); + Log.d(TAG, "Validator error: mediaFile height invalid: " + videoHeight); iter.remove(); continue; } @@ -143,15 +140,13 @@ private int prefilterMediaFiles(List mediaFiles) { // width attribute BigInteger width = mediaFile.getWidth(); if (null == width) { - VASTLog.d(TAG, "Validator error: mediaFile width null"); + Log.d(TAG, "Validator error: mediaFile width null"); iter.remove(); continue; } int videoWidth = width.intValue(); if (!(0 < videoWidth && videoWidth < maxPixels)) { - VASTLog.d(TAG, - "Validator error: mediaFile width invalid: " - + videoWidth); + Log.d(TAG, "Validator error: mediaFile width invalid: " + videoWidth); iter.remove(); continue; } @@ -159,7 +154,7 @@ private int prefilterMediaFiles(List mediaFiles) { // mediaFile url String url = mediaFile.getValue(); if (TextUtils.isEmpty(url)) { - VASTLog.d(TAG, "Validator error: mediaFile url empty"); + Log.d(TAG, "Validator error: mediaFile url empty"); iter.remove(); } } @@ -185,10 +180,10 @@ private void setDeviceWidthHeight(int width, int height) { } - private class AreaComparator implements Comparator { + private class AreaComparator implements Comparator { @Override - public int compare(VASTMediaFile obj1, VASTMediaFile obj2) { + public int compare(MediaFile obj1, MediaFile obj2) { // get area of the video of the two MediaFiles int obj1Area = obj1.getWidth().intValue() * obj1.getHeight().intValue(); int obj2Area = obj2.getWidth().intValue() * obj2.getHeight().intValue(); @@ -196,7 +191,7 @@ public int compare(VASTMediaFile obj1, VASTMediaFile obj2) { // get the difference between the area of the MediaFile and the area of the screen int obj1Diff = Math.abs(obj1Area - deviceArea); int obj2Diff = Math.abs(obj2Area - deviceArea); - VASTLog.v(TAG, "AreaComparator: obj1:" + obj1Diff + " obj2:" + obj2Diff); + Log.v(TAG, "AreaComparator: obj1:" + obj1Diff + " obj2:" + obj2Diff); // choose the MediaFile which has the lower difference in area if (obj1Diff < obj2Diff) { @@ -212,18 +207,18 @@ else if (obj1Diff > obj2Diff) { } - private boolean isMediaFileCompatible(VASTMediaFile media) { + private boolean isMediaFileCompatible(MediaFile media) { // check if the MediaFile is compatible with the device. // further checks can be added here return media.getType().matches(SUPPORTED_VIDEO_TYPE_REGEX); } - private VASTMediaFile getBestMatch(List list) { + private MediaFile getBestMatch(List list) { - VASTLog.d(TAG, "getBestMatch"); + Log.d(TAG, "getBestMatch"); - for (VASTMediaFile media : list) { + for (MediaFile media : list) { if (isMediaFileCompatible(media)) { return media; } diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/HttpTools.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/HttpTools.java index d96141c..654fbda 100644 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/HttpTools.java +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/HttpTools.java @@ -45,47 +45,53 @@ package com.amazon.android.ads.vast.util; import android.text.TextUtils; +import android.util.Log; import java.net.HttpURLConnection; import java.net.URL; public class HttpTools { - private static final String TAG = HttpTools.class.getName(); + private static final String TAG = HttpTools.class.getName(); - public static void httpGetURL(final String url) { - if (!TextUtils.isEmpty(url)) { - new Thread() { - @Override - public void run() { - HttpURLConnection conn = null; - try { - VASTLog.v(TAG, "connection to URL:" + url); - URL httpUrl = new URL(url); + public static void httpGetURL(final String url) { - HttpURLConnection.setFollowRedirects(true); - conn = (HttpURLConnection) httpUrl.openConnection(); - conn.setConnectTimeout(5000); - conn.setRequestProperty("Connection", "close"); - conn.setRequestMethod("GET"); + if (!TextUtils.isEmpty(url)) { + new Thread() { + @Override + public void run() { - int code = conn.getResponseCode(); - VASTLog.v(TAG, "response code:" + code - + ", for URL:" + url); - } catch (Exception e) { - VASTLog.w(TAG, url + ": " + e.getMessage() + ":" - + e.toString()); - } finally { - if (conn != null) { - conn.disconnect(); - } - } - } - }.start(); - } else { - VASTLog.w(TAG, "url is null or empty"); - - } + HttpURLConnection conn = null; + try { + Log.d(TAG, "connection to URL:" + url); + URL httpUrl = new URL(url); - } + HttpURLConnection.setFollowRedirects(true); + conn = (HttpURLConnection) httpUrl.openConnection(); + conn.setConnectTimeout(5000); + conn.setRequestProperty("Connection", "close"); + conn.setRequestMethod("GET"); + + int code = conn.getResponseCode(); + Log.d(TAG, "response code:" + code + + ", for URL:" + url); + } + catch (Exception e) { + Log.e(TAG, url + ": " + e.getMessage() + ":" + + e.toString()); + } + finally { + if (conn != null) { + conn.disconnect(); + } + } + } + }.start(); + } + else { + Log.e(TAG, "url is null or empty"); + + } + + } } diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/NetworkTools.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/NetworkTools.java index b54601e..8f73e56 100644 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/NetworkTools.java +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/NetworkTools.java @@ -48,15 +48,18 @@ import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkInfo; +import android.util.Log; public class NetworkTools { private static final String TAG = HttpTools.class.getName(); - // This method return true if it's connected to Internet + /** + * This method returns true if it's connected to Internet + */ public static boolean connectedToInternet(Context context) { - VASTLog.d(TAG, "Testing connectivity:"); + Log.d(TAG, "Testing connectivity:"); ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); @@ -65,32 +68,33 @@ public static boolean connectedToInternet(Context context) { NetworkInfo wifiNetwork = getNetworkInfo(cm, networks, ConnectivityManager.TYPE_WIFI); if (wifiNetwork != null && wifiNetwork.isConnected()) { - VASTLog.d(TAG, "Connected to Internet"); + Log.d(TAG, "Connected to Internet"); return true; } NetworkInfo mobileNetwork = getNetworkInfo(cm, networks, ConnectivityManager.TYPE_MOBILE); if (mobileNetwork != null && mobileNetwork.isConnected()) { - VASTLog.d(TAG, "Connected to Internet"); + Log.d(TAG, "Connected to Internet"); return true; } NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnected()) { - VASTLog.d(TAG, "Connected to Internet"); + Log.d(TAG, "Connected to Internet"); return true; } - VASTLog.d(TAG, "No Internet connection"); + Log.d(TAG, "No Internet connection"); return false; } /** * Get the NetworkInfo for the connection with the given connectionType - * @param cm ConnectivityMonitor for the context - * @param networks List of + * + * @param cm ConnectivityMonitor for the context + * @param networks List of * @param connectionType Type of network connection, e.g., ConnectivityManager.TYPE_WIFI, etc * @return The NetworkInfo for the given connection type, or null if the connection type does - * not exist + * not exist */ private static NetworkInfo getNetworkInfo(ConnectivityManager cm, Network[] networks, int connectionType) { diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/VASTLog.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/VASTLog.java deleted file mode 100644 index 3233deb..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/VASTLog.java +++ /dev/null @@ -1,131 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.util; - -import android.util.Log; - -public class VASTLog { - - private static String TAG = "VAST"; - - public enum LOG_LEVEL { - - verbose(1), - debug(2), - info(3), - warning(4), - error(5), - none(6); - - private int value; - - LOG_LEVEL(int value) { - - this.value = value; - - } - - public int getValue() { - - return value; - } - } - - private static LOG_LEVEL LEVEL = LOG_LEVEL.verbose; - - public static void v(String tag, String msg) { - - if (LEVEL.getValue() <= LOG_LEVEL.verbose.getValue()) { - Log.v(tag, msg); - } - } - - public static void d(String tag, String msg) { - - if (LEVEL.getValue() <= LOG_LEVEL.debug.getValue()) { - Log.d(tag, msg); - } - } - - public static void i(String tag, String msg) { - - if (LEVEL.getValue() <= LOG_LEVEL.info.getValue()) { - Log.i(tag, msg); - } - } - - public static void w(String tag, String msg) { - - if (LEVEL.getValue() <= LOG_LEVEL.warning.getValue()) { - Log.w(tag, msg); - } - } - - public static void e(String tag, String msg) { - - if (LEVEL.getValue() <= LOG_LEVEL.error.getValue()) { - Log.e(tag, msg); - } - } - - public static void e(String tag, String msg, Throwable tr) { - - if (LEVEL.getValue() <= LOG_LEVEL.error.getValue()) { - Log.e(tag, msg, tr); - } - } - - public static void setLoggingLevel(LOG_LEVEL logLevel) { - - Log.i(TAG, "Changing logging level from :" + LEVEL + ". To:" + logLevel); - LEVEL = logLevel; - } - - public static LOG_LEVEL getLoggingLevel() { - - return LEVEL; - } - -} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/VastAdListener.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/VastAdListener.java new file mode 100644 index 0000000..715e22d --- /dev/null +++ b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/VastAdListener.java @@ -0,0 +1,53 @@ +/** + * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.android.ads.vast.util; + +import com.amazon.android.ads.vast.model.vmap.AdBreak; + +import java.util.List; + +/** + * Listener to keep track of playing vast ad pods. + */ +public interface VastAdListener { + + /** + * Indicates that the VMAP response has been parsed and the ads are ready to be played. + */ + void adsReady(); + + /** + * To be called on the start of an ad pod, or chuck of ads to be played together. + * + * @param adIdx The index of the ad to start at. + * @param adList The list of ads to play. + */ + void startAdPod(int adIdx, List adList); + + /** + * To be called when the ad should start playing. + */ + void startAd(); + + /** + * To be called when the ad is done playing. + */ + void adComplete(); + + /** + * To be called when all the ads of the ad pod have been played. + */ + void adPodComplete(); +} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/XmlTools.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/XmlTools.java deleted file mode 100644 index ca5a804..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/XmlTools.java +++ /dev/null @@ -1,207 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.util; - -import org.w3c.dom.CharacterData; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringReader; -import java.io.StringWriter; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -public class XmlTools { - - private static String TAG = "XmlTools"; - - public static void logXmlDocument(Document doc) { - VASTLog.d(TAG, "logXmlDocument"); - try { - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - transformer - .setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); - transformer.setOutputProperty(OutputKeys.METHOD, "xml"); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); - transformer.setOutputProperty( - "{http://xml.apache.org/xslt}indent-amount", "4"); - - StringWriter sw = new StringWriter(); - transformer.transform(new DOMSource(doc), new StreamResult(sw)); - - VASTLog.d(TAG, sw.toString()); - - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - } - } - - public static String xmlDocumentToString(Document doc) { - String xml = null; - VASTLog.d(TAG, "xmlDocumentToString"); - try { - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - transformer - .setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); - transformer.setOutputProperty(OutputKeys.METHOD, "xml"); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); - transformer.setOutputProperty( - "{http://xml.apache.org/xslt}indent-amount", "4"); - - StringWriter sw = new StringWriter(); - transformer.transform(new DOMSource(doc), new StreamResult(sw)); - - xml = sw.toString(); - - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - } - - return xml; - } - - public static String xmlDocumentToString(Node node) { - String xml = null; - VASTLog.d(TAG, "xmlDocumentToString"); - try { - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - transformer - .setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - transformer.setOutputProperty(OutputKeys.METHOD, "xml"); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); - transformer.setOutputProperty( - "{http://xml.apache.org/xslt}indent-amount", "4"); - - StringWriter sw = new StringWriter(); - transformer.transform(new DOMSource(node), new StreamResult(sw)); - - xml = sw.toString(); - - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - } - - return xml; - } - public static Document stringToDocument(String doc) { - VASTLog.d(TAG, "stringToDocument"); - - DocumentBuilder db; - Document document = null; - try { - db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - - InputSource is = new InputSource(); - is.setCharacterStream(new StringReader(doc)); - - document = db.parse(is); - - } catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - } - return document; - - } - - public static String stringFromStream(InputStream inputStream) - throws IOException { - VASTLog.d(TAG, "stringFromStream"); - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int length; - - while ((length = inputStream.read(buffer)) != -1) { - baos.write(buffer, 0, length); - } - - byte[] bytes = baos.toByteArray(); - - return new String(bytes, "UTF-8"); - } - - public static String getElementValue(Node node) { - - NodeList childNodes = node.getChildNodes(); - Node child; - String value = null; - CharacterData cd; - - for (int childIndex = 0; childIndex < childNodes.getLength(); childIndex++) { - child = childNodes.item(childIndex); - // value = child.getNodeValue().trim(); - cd = (CharacterData) child; - value = cd.getData().trim(); - - if (value.length() == 0) { - // this node was whitespace - continue; - } - - VASTLog.v(TAG, "getElementValue: " + value); - return value; - - } - return value; - } - -} diff --git a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/XmlValidation.java b/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/XmlValidation.java deleted file mode 100644 index 72e68cc..0000000 --- a/VastAdsComponent/src/main/java/com/amazon/android/ads/vast/util/XmlValidation.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * This file was modified by Amazon: - * Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -/* - * Copyright (c) 2014, Nexage, Inc. All rights reserved. - * Copyright (C) 2016 Amazon Inc. - * - * Provided under BSD-3 license as follows: - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * 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. - * - * Neither the name of Nexage nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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 com.amazon.android.ads.vast.util; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import mf.javax.xml.transform.Source; -import mf.javax.xml.transform.stream.StreamSource; -import mf.javax.xml.validation.Schema; -import mf.javax.xml.validation.SchemaFactory; -import mf.javax.xml.validation.Validator; -import mf.org.apache.xerces.jaxp.validation.XMLSchemaFactory; - -public class XmlValidation { - - private static String TAG = "XmlTools"; - - public static boolean validate(InputStream schemaStream, String xml) { - - VASTLog.i(TAG, "Beginning XSD validation."); - SchemaFactory factory = new XMLSchemaFactory(); - Source schemaSource = new StreamSource(schemaStream); - Source xmlSource = new StreamSource(new ByteArrayInputStream(xml.getBytes())); - Schema schema; - try { - schema = factory.newSchema(schemaSource); - Validator validator = schema.newValidator(); - validator.validate(xmlSource); - } - catch (Exception e) { - VASTLog.e(TAG, e.getMessage(), e); - return false; - } - VASTLog.i(TAG, "Completed XSD validation.."); - return true; - } - -} diff --git a/VastAdsComponent/src/main/res/values-en-rUS/strings.xml b/VastAdsComponent/src/main/res/values-en-rUS/strings.xml deleted file mode 120000 index c2d3f2b..0000000 --- a/VastAdsComponent/src/main/res/values-en-rUS/strings.xml +++ /dev/null @@ -1 +0,0 @@ -../values/strings.xml \ No newline at end of file diff --git a/VastAdsComponent/src/main/res/values-en-rUS/strings.xml b/VastAdsComponent/src/main/res/values-en-rUS/strings.xml new file mode 100644 index 0000000..3c92709 --- /dev/null +++ b/VastAdsComponent/src/main/res/values-en-rUS/strings.xml @@ -0,0 +1,16 @@ + + + diff --git a/VastAdsComponent/src/main/res/values/values.xml b/VastAdsComponent/src/main/res/values/values.xml index 607dd65..0688bb7 100644 --- a/VastAdsComponent/src/main/res/values/values.xml +++ b/VastAdsComponent/src/main/res/values/values.xml @@ -13,5 +13,6 @@ express or implied. See the License for the specific language governing permissions and limitations under the License. --> - "https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ct%3Dlinear&correlator=" + + https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpremidpostpod&cmsid=496&vid=short_onecue&correlator=

    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%0DPV8NdOCT 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 z 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