From d67b737caf84afa32a049f1322e046e353c7fdd9 Mon Sep 17 00:00:00 2001 From: Jackson Sui Date: Tue, 9 Jul 2024 07:35:14 -0700 Subject: [PATCH] Updates samples to v3.34.0. PiperOrigin-RevId: 650622337 --- AdvancedExample/app/build.gradle | 6 ++-- .../videoplayerapp/VideoPlayerController.java | 2 ++ .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- audioplayerexample/app/build.gradle | 6 ++-- .../AudioPlayerService.java | 27 ++++++++---------- .../audioplayerexample/ImaService.java | 6 ++-- .../gradle/wrapper/gradle-wrapper.properties | 3 +- basicexample/app/build.gradle | 4 +-- .../v3/samples/videoplayerapp/MyActivity.java | 28 ++++++++++++++++--- .../app/src/main/res/layout/activity_my.xml | 2 ++ .../gradle/wrapper/gradle-wrapper.properties | 3 +- umpexample/app/build.gradle | 4 +-- umpexample/app/src/main/AndroidManifest.xml | 2 +- .../v3/samples/umpimaapp/MyActivity.java | 8 ++++-- .../app/src/main/res/layout/activity_my.xml | 2 ++ .../gradle/wrapper/gradle-wrapper.properties | 3 +- 17 files changed, 66 insertions(+), 46 deletions(-) diff --git a/AdvancedExample/app/build.gradle b/AdvancedExample/app/build.gradle index 24374351..402de0e8 100644 --- a/AdvancedExample/app/build.gradle +++ b/AdvancedExample/app/build.gradle @@ -12,7 +12,7 @@ android { defaultConfig { applicationId "com.google.ads.interactivemedia.v3.samples.videoplayerapp" - minSdkVersion 19 + minSdkVersion 21 targetSdkVersion 34 multiDexEnabled true versionCode 1 @@ -35,10 +35,10 @@ repositories { dependencies { implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) implementation 'androidx.multidex:multidex:2.0.1' - implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.mediarouter:mediarouter:1.7.0' implementation 'com.android.support.constraint:constraint-layout:2.0.4' - implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.33.0' + implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.34.0' } diff --git a/AdvancedExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/VideoPlayerController.java b/AdvancedExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/VideoPlayerController.java index ac0ebf77..a5e2ef1c 100644 --- a/AdvancedExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/VideoPlayerController.java +++ b/AdvancedExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/VideoPlayerController.java @@ -141,6 +141,8 @@ public void onAdEvent(AdEvent adEvent) { AdsRenderingSettings adsRenderingSettings = ImaSdkFactory.getInstance().createAdsRenderingSettings(); adsRenderingSettings.setPlayAdsAfterTime(playAdsAfterTime); + // Add any ads rendering settings here. + // This init() only loads the UI rendering settings locally. adsManager.init(adsRenderingSettings); seek(playAdsAfterTime); videoStarted = true; diff --git a/AdvancedExample/gradle/wrapper/gradle-wrapper.properties b/AdvancedExample/gradle/wrapper/gradle-wrapper.properties index ee26ec73..de183985 100644 --- a/AdvancedExample/gradle/wrapper/gradle-wrapper.properties +++ b/AdvancedExample/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,6 @@ -#Mon Jan 14 17:00:49 PST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip diff --git a/ExoPlayerExample/gradle/wrapper/gradle-wrapper.properties b/ExoPlayerExample/gradle/wrapper/gradle-wrapper.properties index 663758d9..5d6560a4 100644 --- a/ExoPlayerExample/gradle/wrapper/gradle-wrapper.properties +++ b/ExoPlayerExample/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed Dec 12 10:57:27 PST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip diff --git a/audioplayerexample/app/build.gradle b/audioplayerexample/app/build.gradle index bd3287b0..858057a1 100644 --- a/audioplayerexample/app/build.gradle +++ b/audioplayerexample/app/build.gradle @@ -42,13 +42,13 @@ repositories { dependencies { implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) - implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'androidx.media:media:1.7.0' def media3_version = "1.3.1" implementation "androidx.media3:media3-ui:$media3_version" implementation "androidx.media3:media3-exoplayer:$media3_version" implementation "androidx.media3:media3-session:$media3_version" - implementation 'com.google.guava:guava:28.1-android' - implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.33.0' + implementation 'com.google.guava:guava:32.1.3-android' + implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.34.0' } diff --git a/audioplayerexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/audioplayerexample/AudioPlayerService.java b/audioplayerexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/audioplayerexample/AudioPlayerService.java index 18c7bbb9..6e060ec0 100644 --- a/audioplayerexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/audioplayerexample/AudioPlayerService.java +++ b/audioplayerexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/audioplayerexample/AudioPlayerService.java @@ -21,10 +21,8 @@ import androidx.media3.datasource.DefaultDataSource; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.analytics.AnalyticsListener; -import androidx.media3.exoplayer.source.ConcatenatingMediaSource; import androidx.media3.exoplayer.source.MediaSource; import androidx.media3.exoplayer.source.ProgressiveMediaSource; -import androidx.media3.exoplayer.source.ShuffleOrder; import androidx.media3.session.MediaSession; import androidx.media3.ui.PlayerNotificationManager; import androidx.media3.ui.PlayerNotificationManager.BitmapCallback; @@ -34,6 +32,8 @@ import com.google.ads.interactivemedia.v3.api.CompanionAdSlot; import com.google.ads.interactivemedia.v3.api.ImaSdkFactory; import com.google.common.collect.ImmutableList; +import java.util.ArrayList; +import java.util.List; /** * Allows audio playback with hooks for advertisements. This is meant to run as a Foreground Service @@ -45,11 +45,9 @@ public class AudioPlayerService extends Service { private boolean isAdPlaying; private ExoPlayer player; + private List contentMediaSources; private MediaSession mediaSession; - private PlayerNotificationManager playerNotificationManager; - private ConcatenatingMediaSource contentMediaSource; private ImaService imaService; - private final Samples.Sample[] sampleList = Samples.getSamples(); @Override @@ -62,19 +60,15 @@ public void onCreate() { DefaultDataSource.Factory dataSourceFactory = new DefaultDataSource.Factory(context); - contentMediaSource = - new ConcatenatingMediaSource( - /* isAtomic= */ false, - /* useLazyPreparation= */ true, - new ShuffleOrder.DefaultShuffleOrder(/* length= */ 0)); + contentMediaSources = new ArrayList<>(); for (Samples.Sample sample : sampleList) { MediaItem mediaItem = new MediaItem.Builder().setUri(sample.uri).build(); MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem); - contentMediaSource.addMediaSource(mediaSource); + contentMediaSources.add(mediaSource); } - player.setMediaSource(contentMediaSource); + player.addMediaSources(contentMediaSources); player.prepare(); player.setPlayWhenReady(true); @@ -117,7 +111,7 @@ public Bitmap getCurrentLargeIcon(Player player, BitmapCallback callback) { } }; - playerNotificationManager = + PlayerNotificationManager playerNotificationManager = new PlayerNotificationManager.Builder( context, /* notificationId= */ PLAYBACK_NOTIFICATION_ID, @@ -127,7 +121,8 @@ public Bitmap getCurrentLargeIcon(Player player, BitmapCallback callback) { .setChannelDescriptionResourceId(R.string.playback_channel_description) .setNotificationListener( new NotificationListener() { - public void onNotificationStarted( + @Override + public void onNotificationPosted( int notificationId, Notification notification, boolean ongoing) { // This must be called within 5 seconds of the notification being displayed and // before the main app has been killed. @@ -183,16 +178,18 @@ public void claim() { player.setPlayWhenReady(false); } + @androidx.media3.common.util.UnstableApi public void release() { if (isAdPlaying) { isAdPlaying = false; - player.setMediaSource(contentMediaSource); + player.addMediaSources(contentMediaSources); player.prepare(); player.setPlayWhenReady(true); // TODO: Seek to where you left off the stream, if needed. } } + @androidx.media3.common.util.UnstableApi public void prepare(MediaSource mediaSource) { player.setMediaSource(mediaSource); player.prepare(); diff --git a/audioplayerexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/audioplayerexample/ImaService.java b/audioplayerexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/audioplayerexample/ImaService.java index bf0f0609..f237196b 100644 --- a/audioplayerexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/audioplayerexample/ImaService.java +++ b/audioplayerexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/audioplayerexample/ImaService.java @@ -309,9 +309,9 @@ public boolean handleMessage(Message msg) { messageHandler.removeMessages(UPDATE); break; case UPDATE: - // Intentional fallthrough. START message is introduced as a way to differentiate the - // beginning (the START of progress event) and progress itself (UPDATE events). Handling - // for both the messages are same. + // Intentional fallthrough. START message is introduced as a way to differentiate the + // beginning (the START of progress event) and progress itself (UPDATE events). Handling + // for both the messages are same. case START: player.sendProgressUpdate(); messageHandler.removeMessages(UPDATE); diff --git a/audioplayerexample/gradle/wrapper/gradle-wrapper.properties b/audioplayerexample/gradle/wrapper/gradle-wrapper.properties index 06388faa..5d6560a4 100644 --- a/audioplayerexample/gradle/wrapper/gradle-wrapper.properties +++ b/audioplayerexample/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Sat Apr 14 08:02:51 BST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip diff --git a/basicexample/app/build.gradle b/basicexample/app/build.gradle index 574febff..65294779 100644 --- a/basicexample/app/build.gradle +++ b/basicexample/app/build.gradle @@ -33,8 +33,8 @@ repositories { dependencies { implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) - implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'androidx.browser:browser:1.8.0' implementation 'androidx.media:media:1.7.0' - implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.33.0' + implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.34.0' } diff --git a/basicexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/MyActivity.java b/basicexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/MyActivity.java index bd60f7fd..f03dbdf9 100644 --- a/basicexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/MyActivity.java +++ b/basicexample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/MyActivity.java @@ -3,13 +3,14 @@ package com.google.ads.interactivemedia.v3.samples.videoplayerapp; import android.content.Context; +import android.content.res.Configuration; import android.media.AudioManager; import android.os.Bundle; import android.util.Log; import android.view.View; -import android.view.ViewGroup; import android.widget.MediaController; import android.widget.VideoView; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.google.ads.interactivemedia.v3.api.AdDisplayContainer; import com.google.ads.interactivemedia.v3.api.AdErrorEvent; @@ -72,14 +73,14 @@ protected void onCreate(Bundle savedInstanceState) { videoPlayer.setMediaController(mediaController); // Create an ad display container that uses a ViewGroup to listen to taps. - ViewGroup videoPlayerContainer = findViewById(R.id.videoPlayerContainer); AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); videoAdPlayerAdapter = new VideoAdPlayerAdapter(videoPlayer, audioManager); sdkFactory = ImaSdkFactory.getInstance(); AdDisplayContainer adDisplayContainer = - ImaSdkFactory.createAdDisplayContainer(videoPlayerContainer, videoAdPlayerAdapter); + ImaSdkFactory.createAdDisplayContainer( + findViewById(R.id.videoPlayerContainer), videoAdPlayerAdapter); // Create an AdsLoader. ImaSdkSettings settings = sdkFactory.createImaSdkSettings(); @@ -174,6 +175,8 @@ public void onAdEvent(AdEvent adEvent) { }); AdsRenderingSettings adsRenderingSettings = ImaSdkFactory.getInstance().createAdsRenderingSettings(); + // Add any ads rendering settings here. + // This init() only loads the UI rendering settings locally. adsManager.init(adsRenderingSettings); } }); @@ -186,6 +189,23 @@ public void onAdEvent(AdEvent adEvent) { requestAds(SAMPLE_VAST_TAG_URL); view.setVisibility(View.GONE); }); + updateVideoDescriptionVisibility(); + } + + @Override + public void onConfigurationChanged(@NonNull Configuration configuration) { + super.onConfigurationChanged(configuration); + // Hide the extra content when in landscape so the video is as large as possible. + updateVideoDescriptionVisibility(); + } + + private void updateVideoDescriptionVisibility() { + int orientation = getResources().getConfiguration().orientation; + if (orientation == Configuration.ORIENTATION_LANDSCAPE) { + findViewById(R.id.videoDescription).setVisibility(View.GONE); + } else { + findViewById(R.id.videoDescription).setVisibility(View.VISIBLE); + } } private void pauseContentForAds() { @@ -213,7 +233,7 @@ private void resumeContent() { mediaPlayer -> videoAdPlayerAdapter.notifyImaOnContentCompleted()); } - private void requestAds(String adTagUrl) { + private void requestAds(@NonNull String adTagUrl) { // Create the ads request. AdsRequest request = sdkFactory.createAdsRequest(); request.setAdTagUrl(adTagUrl); diff --git a/basicexample/app/src/main/res/layout/activity_my.xml b/basicexample/app/src/main/res/layout/activity_my.xml index 8f9de081..27af83a6 100644 --- a/basicexample/app/src/main/res/layout/activity_my.xml +++ b/basicexample/app/src/main/res/layout/activity_my.xml @@ -8,6 +8,7 @@ tools:ignore="MergeRootFrame"> diff --git a/basicexample/gradle/wrapper/gradle-wrapper.properties b/basicexample/gradle/wrapper/gradle-wrapper.properties index 663758d9..5d6560a4 100644 --- a/basicexample/gradle/wrapper/gradle-wrapper.properties +++ b/basicexample/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed Dec 12 10:57:27 PST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip diff --git a/umpexample/app/build.gradle b/umpexample/app/build.gradle index 105386de..19ae58c7 100644 --- a/umpexample/app/build.gradle +++ b/umpexample/app/build.gradle @@ -33,9 +33,9 @@ repositories { dependencies { implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) - implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'androidx.browser:browser:1.8.0' implementation 'androidx.media:media:1.7.0' - implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.33.0' + implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.34.0' implementation 'com.google.android.ump:user-messaging-platform:2.2.0' } diff --git a/umpexample/app/src/main/AndroidManifest.xml b/umpexample/app/src/main/AndroidManifest.xml index 42e33aa1..cfc5ee59 100644 --- a/umpexample/app/src/main/AndroidManifest.xml +++ b/umpexample/app/src/main/AndroidManifest.xml @@ -12,7 +12,7 @@ android:label="@string/app_name" android:taskAffinity=""> - + { videoPlayer.setVideoPath(SAMPLE_VIDEO_URL); @@ -265,7 +267,7 @@ private void resumeContent() { mediaPlayer -> videoAdPlayerAdapter.notifyImaOnContentCompleted()); } - private void requestAds(String adTagUrl) { + private void requestAds(@NonNull String adTagUrl) { // Create the ads request. AdsRequest request = sdkFactory.createAdsRequest(); request.setAdTagUrl(adTagUrl); diff --git a/umpexample/app/src/main/res/layout/activity_my.xml b/umpexample/app/src/main/res/layout/activity_my.xml index a407cdc3..872471ae 100644 --- a/umpexample/app/src/main/res/layout/activity_my.xml +++ b/umpexample/app/src/main/res/layout/activity_my.xml @@ -8,6 +8,7 @@ tools:ignore="MergeRootFrame"> diff --git a/umpexample/gradle/wrapper/gradle-wrapper.properties b/umpexample/gradle/wrapper/gradle-wrapper.properties index 663758d9..5d6560a4 100644 --- a/umpexample/gradle/wrapper/gradle-wrapper.properties +++ b/umpexample/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed Dec 12 10:57:27 PST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip