diff --git a/MediaSessionKotlin/.gitignore b/MediaSessionKotlin/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/MediaSessionKotlin/.gitignore @@ -0,0 +1 @@ +/build diff --git a/MediaSessionKotlin/build.gradle b/MediaSessionKotlin/build.gradle new file mode 100644 index 00000000..30345f84 --- /dev/null +++ b/MediaSessionKotlin/build.gradle @@ -0,0 +1,44 @@ +plugins { + id 'com.android.application' + id 'org.jetbrains.kotlin.android' +} + +android { + namespace 'com.bitmovin.player.samples.media.session' + compileSdk rootProject.compileSdk + + defaultConfig { + applicationId "com.bitmovin.player.samples.media.session" + minSdkVersion rootProject.minSdkVersion + targetSdkVersion rootProject.targetSdkVersion + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + buildFeatures { + viewBinding = true + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = '11' + } +} + +dependencies { + implementation supportDependencies.appCompat + implementation bitmovinPlayerDependencies.bitmovinPlayer + implementation "com.bitmovin.player:player-media-session:${bitmovinPlayerVersion}" + implementation 'androidx.activity:activity:1.9.3' + implementation 'com.google.android.material:material:1.12.0' +} diff --git a/MediaSessionKotlin/proguard-rules.pro b/MediaSessionKotlin/proguard-rules.pro new file mode 100644 index 00000000..f1b42451 --- /dev/null +++ b/MediaSessionKotlin/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# 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 *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/MediaSessionKotlin/src/main/AndroidManifest.xml b/MediaSessionKotlin/src/main/AndroidManifest.xml new file mode 100644 index 00000000..0e626c03 --- /dev/null +++ b/MediaSessionKotlin/src/main/AndroidManifest.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MediaSessionKotlin/src/main/java/com/bitmovin/player/samples/media/session/MainActivity.kt b/MediaSessionKotlin/src/main/java/com/bitmovin/player/samples/media/session/MainActivity.kt new file mode 100644 index 00000000..a8907c35 --- /dev/null +++ b/MediaSessionKotlin/src/main/java/com/bitmovin/player/samples/media/session/MainActivity.kt @@ -0,0 +1,117 @@ +package com.bitmovin.player.samples.media.session + +import android.Manifest +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.ServiceConnection +import android.content.pm.PackageManager +import android.os.Build +import android.os.Bundle +import android.os.IBinder +import android.view.ViewGroup +import android.widget.RelativeLayout +import androidx.activity.result.contract.ActivityResultContracts.RequestPermission +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import com.bitmovin.player.PlayerView +import com.bitmovin.player.api.Player +import com.bitmovin.player.api.source.SourceConfig +import com.bitmovin.player.api.source.SourceType +import com.bitmovin.player.samples.media.session.databinding.ActivityMainBinding + +class MainActivity : AppCompatActivity() { + private lateinit var playerView: PlayerView + private var serviceBinder: MediaSessionPlaybackService.ServiceBinder? = null + private val player: Player? get() = serviceBinder?.player + private var isBound = false + private lateinit var uiBinding: ActivityMainBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + uiBinding = ActivityMainBinding.inflate(layoutInflater) + setContentView(uiBinding.root) + // Create a PlayerView without a Player and add it to the View hierarchy + playerView = PlayerView(this, null as Player?).apply { + layoutParams = RelativeLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + } + playerView.keepScreenOn = true + uiBinding.root.addView(playerView) + } + + private fun initializePlayer() { + // Load a new source + val sourceConfig = SourceConfig( + "https://bitmovin-a.akamaihd.net/content/MI201109210084_1/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd", + SourceType.Dash, + posterSource = "https://bitmovin-a.akamaihd.net/content/poster/hd/RedBull.jpg" + ) + + player?.load(sourceConfig) + } + + + private fun bindService() { + val intent = Intent(this, MediaSessionPlaybackService::class.java) + intent.setAction(Intent.ACTION_MEDIA_BUTTON) + bindService(intent, connection, Context.BIND_AUTO_CREATE) + startService(intent) + } + + private fun unbindService() { + unbindService(connection) + } + + override fun onStart() { + super.onStart() + playerView.onStart() + bindService() + } + + override fun onResume() { + super.onResume() + + // Attach the Player to allow the PlayerView to control the player + playerView.player = player + playerView.onResume() + } + + override fun onPause() { + // Detach the Player to decouple it from the PlayerView lifecycle + playerView.player = null + playerView.onPause() + super.onPause() + } + + override fun onStop() { + super.onStop() + // Unbind the Service and reset the Player reference + unbindService() + playerView.onStop() + } + + override fun onDestroy() { + playerView.onDestroy() + super.onDestroy() + } + + private val connection = object : ServiceConnection { + override fun onServiceConnected(className: ComponentName, service: IBinder) { + // We've bound to the Service, cast the IBinder and get the Player instance + val binder = service as MediaSessionPlaybackService.ServiceBinder + serviceBinder = binder + val player = binder.player ?: throw IllegalStateException("Player is null") + playerView.player = player + if (player.source == null) { + initializePlayer() + } + } + + override fun onServiceDisconnected(name: ComponentName) { + isBound = false + } + } +} diff --git a/MediaSessionKotlin/src/main/java/com/bitmovin/player/samples/media/session/MediaSessionPlaybackService.kt b/MediaSessionKotlin/src/main/java/com/bitmovin/player/samples/media/session/MediaSessionPlaybackService.kt new file mode 100644 index 00000000..7ebf2c09 --- /dev/null +++ b/MediaSessionKotlin/src/main/java/com/bitmovin/player/samples/media/session/MediaSessionPlaybackService.kt @@ -0,0 +1,53 @@ +package com.bitmovin.player.samples.media.session + +import android.content.Intent +import android.os.Binder +import android.os.IBinder +import com.bitmovin.player.api.PlaybackConfig +import com.bitmovin.player.api.Player +import com.bitmovin.player.api.PlayerConfig +import com.bitmovin.player.api.media.session.ControllerInfo +import com.bitmovin.player.api.media.session.MediaSession +import com.bitmovin.player.api.media.session.MediaSessionService + +class MediaSessionPlaybackService : MediaSessionService() { + inner class ServiceBinder : Binder() { + val player get() = this@MediaSessionPlaybackService.player + fun connectSession() = addSession(mediaSession) + fun disconnectSession() = removeSession(mediaSession) + } + + private val binder = ServiceBinder() + private lateinit var player: Player + private lateinit var mediaSession: MediaSession + + override fun onGetSession(controllerInfo: ControllerInfo) = mediaSession + + override fun onCreate() { + super.onCreate() + player = Player( + this, PlayerConfig( + playbackConfig = PlaybackConfig( + handleAudioFocus = true + ) + ) + ) + mediaSession = MediaSession( + this, + mainLooper, + player, + ) + } + + override fun onDestroy() { + mediaSession.release() + player.destroy() + + super.onDestroy() + } + + override fun onBind(intent: Intent?): IBinder { + super.onBind(intent) + return binder + } +} diff --git a/MediaSessionKotlin/src/main/res/drawable/ic_launcher_background.xml b/MediaSessionKotlin/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..07d5da9c --- /dev/null +++ b/MediaSessionKotlin/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MediaSessionKotlin/src/main/res/drawable/ic_launcher_foreground.xml b/MediaSessionKotlin/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..7706ab9e --- /dev/null +++ b/MediaSessionKotlin/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/MediaSessionKotlin/src/main/res/layout/activity_main.xml b/MediaSessionKotlin/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..34404b04 --- /dev/null +++ b/MediaSessionKotlin/src/main/res/layout/activity_main.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/MediaSessionKotlin/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/MediaSessionKotlin/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..b3e26b4c --- /dev/null +++ b/MediaSessionKotlin/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/MediaSessionKotlin/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/MediaSessionKotlin/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..b3e26b4c --- /dev/null +++ b/MediaSessionKotlin/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/MediaSessionKotlin/src/main/res/mipmap-hdpi/ic_launcher.webp b/MediaSessionKotlin/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 00000000..c209e78e Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/MediaSessionKotlin/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/MediaSessionKotlin/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 00000000..b2dfe3d1 Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/MediaSessionKotlin/src/main/res/mipmap-mdpi/ic_launcher.webp b/MediaSessionKotlin/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 00000000..4f0f1d64 Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/MediaSessionKotlin/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/MediaSessionKotlin/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 00000000..62b611da Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/MediaSessionKotlin/src/main/res/mipmap-xhdpi/ic_launcher.webp b/MediaSessionKotlin/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 00000000..948a3070 Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/MediaSessionKotlin/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/MediaSessionKotlin/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 00000000..1b9a6956 Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/MediaSessionKotlin/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/MediaSessionKotlin/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 00000000..28d4b77f Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/MediaSessionKotlin/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/MediaSessionKotlin/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 00000000..9287f508 Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/MediaSessionKotlin/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/MediaSessionKotlin/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 00000000..aa7d6427 Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/MediaSessionKotlin/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/MediaSessionKotlin/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 00000000..9126ae37 Binary files /dev/null and b/MediaSessionKotlin/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/MediaSessionKotlin/src/main/res/values/colors.xml b/MediaSessionKotlin/src/main/res/values/colors.xml new file mode 100644 index 00000000..3ab3e9cb --- /dev/null +++ b/MediaSessionKotlin/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/MediaSessionKotlin/src/main/res/values/strings.xml b/MediaSessionKotlin/src/main/res/values/strings.xml new file mode 100644 index 00000000..0e1e427e --- /dev/null +++ b/MediaSessionKotlin/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + MediaSessionKotlin + diff --git a/MediaSessionKotlin/src/main/res/values/themes.xml b/MediaSessionKotlin/src/main/res/values/themes.xml new file mode 100644 index 00000000..96b8200a --- /dev/null +++ b/MediaSessionKotlin/src/main/res/values/themes.xml @@ -0,0 +1,9 @@ + + + + diff --git a/README.md b/README.md index 6bcde122..91e68669 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,7 @@ Every example is available in `Java` and `Kotlin` :+1: + **BackgroundPlayback** Shows how background playback can be implemented for the Bitmovin Player. + **BasicVrPlayback** Shows how the Bitmovin Player can be setup and configured for playback of VR content. + **BasicPiPHandling** Shows how the `BitmovinPlayerView` can be configured to allow the Picture in Picture mode. -+ **BasicControlNotification** Shows how the `BitmovinPlayerNotificationManager` can be used to show playback control notifications. -+ **BasicMediaControl** Shows how the `BitmovinPlayerNotificationManager` can be used to connect to Android's system media controls. ++ **MediaSession** Shows how the media session integration can be used to connect to Android's system media controls and do background playback. + **BasicLowLatencyPlayback** Shows how the Bitmovin Player can be setup to playback streams in low latency mode. + **CustomAdaptation** Shows how the Bitmovin Player can be setup to implement custom adaptation behavior. @@ -84,9 +83,7 @@ Every example is available in `Java` and `Kotlin` :+1: com.bitmovin.player.samples.custom.ui.html com.bitmovin.player.samples.offline.playback com.bitmovin.player.samples.pip.basic - com.bitmovin.player.samples.notification.basic - com.bitmovin.player.samples.mediacontrol.basic - com.bitmovin.player.samples.playback.background + com.bitmovin.player.samples.media.session com.bitmovin.player.samples.tv.playback.basic com.bitmovin.player.samples.playback.lowlatency com.bitmovin.player.samples.custom.adaptation @@ -148,7 +145,7 @@ When you want to develop an own Android application using the Bitmovin Player An It is recommended to reference a specific version as you can see below: ``` - implementation 'com.bitmovin.player:player:3.91.0' + implementation 'com.bitmovin.player:player:3.92.0' ``` #### Additional SDK dependencies diff --git a/dependencies.gradle b/dependencies.gradle index 95f4d720..84cf305a 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -3,7 +3,7 @@ ext { playServicesAdsIdentifierVersion = '18.0.1' imaSdkVersion = '3.33.0' playServicesCastVersion = '21.4.0' - bitmovinPlayerVersion = '3.91.0' + bitmovinPlayerVersion = '3.92.0' appcompat_version = "1.6.1" activity_version = "1.6.1" fragment_version = "1.5.5" diff --git a/gradlew.bat b/gradlew.bat index 9d21a218..9b42019c 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,94 +1,94 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle index bf11af65..fce628f2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,16 +1,12 @@ include ':Analytics', ':AnalyticsKotlin', - ':BackgroundPlayback', - ':BackgroundPlaybackKotlin', ':BasicCasting', ':BasicCastingKotlin', - ':BasicControlNotification', ':BasicDRMPlayback', ':BasicDRMPlaybackKotlin', ':BasicFullscreenHandling', ':BasicFullscreenHandlingKotlin', ':BasicLowLatencyPlayback', - ':BasicMediaControlKotlin', ':BasicMetadataHandling', ':BasicMetadataHandlingKotlin', ':BasicPiPHandling', @@ -43,4 +39,5 @@ include ':Analytics', ':OfflinePlayback', ':OfflinePlaybackKotlin', ':ProgressiveAds', - ':ProgressiveAdsKotlin' + ':ProgressiveAdsKotlin', + ':MediaSessionKotlin'